UUID generátor
UUID (v1, v4, v5, v7) generálása és ellenőrzése, támogatja tömeges generálást és több formázási opciót, valamint több nyelvű kódpéldákat.
Használati útmutató
Az UUID egy 128 bites azonosító, amely szabványosan 36 karakterből áll, kötőjelekkel elválasztva.
UUID v1: Időbélyeg és hálózati kártya információ alapján, időrendben rendezhető, de lehet, hogy felfedi az időt/lokációt.
UUID v4: Véletlenszámok alapján, a leggyakoribb, jó egyediséget és adatvédelmet biztosít.
UUID v7: Unix milliszekundum-idő + véletlen szám alapján, természetesen rendezhető, és elkerüli az v1 adatvédelmi problémáit.
UUID v5: Névtér UUID és név alapján, SHA-1 segítségével számolva; azonos bemenetre mindig azonos kimenetet ad.
Szabványos formátum: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 karakter).
Funkciók
- Támogatja az UUID v1, v4, v5, v7 verziókat
- Támogatja a felhasználó által meghatározott számú tömeges generálást
- Rugalmas formázás: nagybetűs, kötőjelek eltávolítása, zárójelek hozzáadása
- Beépített ellenőrző és verziófelismerő
- Teljes nemzetköziítés és több téma támogatás
Mi az UUID?
Az UUID egy 128 bites azonosító, amely szabványosan 36 karakterből áll, kötőjelekkel elválasztva.
UUID v1: Időbélyeg és hálózati kártya információ alapján, időrendben rendezhető, de lehet, hogy felfedi az időt/lokációt.
UUID v4: Véletlenszámok alapján, a leggyakoribb, jó egyediséget és adatvédelmet biztosít.
UUID v7: Unix milliszekundum-idő + véletlen szám alapján, természetesen rendezhető, és elkerüli az v1 adatvédelmi problémáit.
UUID v5: Névtér UUID és név alapján, SHA-1 segítségével számolva; azonos bemenetre mindig azonos kimenetet ad.
UUID Gyakori használati esetek
- Adatbázis-rekordok vagy erőforrások egyedi azonosítója
- Naplózás és eseménykövetés Trace ID-je
- Nehéz kitalálható nyilvános azonosító
- Különböző rendszerek közötti egységes azonosító
UUID GYIK és csapdák
- v1 és adatvédelem: Az v1 felfedheti az időt/lokációt, adatvédelem érdekében javasolt az v4 használata.
- Nagy- és kisbetű egyenértékű-e: A matchednél nem érzékeny a betűméretre
- A kötőjelek csak formázási jellegűek; ha nincs korlátozás, ajánlott megtartani
- A zárójeles formátumot néhány környezet elfogadja (pl. Windows registrier)
- Az v5 determinisztikus (azonos névtér + név => azonos UUID). Ideális idempotens helyzetekhez; nem alkalmas előre nem láthatóságot igénylő esetekhez.
Hogyan használjuk az UUID-t programozási nyelveken
JavaScript
Generálás
// UUID v4 (simple)
function uuidv4(){
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
const id = uuidv4();
UUID v7 (Unix idő + véletlen)
// UUID v7 (Unix ms + randomness)
function uuidv7(){
const cryptoObj = (globalThis.crypto || globalThis.msCrypto);
const rb = n => { const a = new Uint8Array(n); cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(a) : a.forEach((_,i)=>a[i]=Math.random()*256|0); return a; };
const hex = b => Array.from(b).map(x=>x.toString(16).padStart(2,'0')).join('');
const ts = BigInt(Date.now()).toString(16).padStart(12,'0');
const ver = rb(2); ver[0] = (ver[0] & 0x0f) | 0x70; // set version 7
const vrn = rb(2); vrn[0] = (vrn[0] & 0x3f) | 0x80; // RFC4122 variant
const tail = rb(6);
return `${ts.slice(0,8)}-${ts.slice(8,12)}-${hex(ver)}-${hex(vrn)}-${hex(tail)}`;
}
const id7 = uuidv7();
Ellenőrzés
const re=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
re.test(id); // true/false
PHP
Generálás
<?php
// v4 using random_bytes
function uuidv4(){
$data = random_bytes(16);
$data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
$data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$id = uuidv4();
UUID v7 (Unix idő + véletlen)
<?php
// composer require ramsey/uuid:^4.7
use Ramsey\Uuid\Uuid;
$uuid7 = Uuid::uuid7();
Ellenőrzés
<?php
$re = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
preg_match($re, $id) === 1; // true/false
Python
Generálás
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
UUID v7 (Unix idő + véletlen)
# pip install uuid6
from uuid6 import uuid7
uid7 = uuid7()
Ellenőrzés
import re
re_uuid = re.compile(r'^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', re.I)
bool(re_uuid.match(str(uid)))
Go
Generálás
// go get github.com/google/uuid
import "github.com/google/uuid"
id := uuid.New() // v4
id1 := uuid.NewUUID() // v1 (may return error)
UUID v7 (Unix idő + véletlen)
// go get github.com/gofrs/uuid/v5
import (
uuid "github.com/gofrs/uuid/v5"
)
id7, err := uuid.NewV7()
Ellenőrzés
import "github.com/google/uuid"
_, err := uuid.Parse(id.String()) // err == nil means valid
Rust
Generálás
// Cargo.toml: uuid = { version = "1", features = ["v4", "v1"] }
use uuid::Uuid;
let v4 = Uuid::new_v4();
// v1 requires a context/ts, often via external crate; shown for completeness
UUID v7 (Unix idő + véletlen)
// Cargo.toml: uuid = { version = "1", features = ["v7"] }
use uuid::Uuid;
let v7 = Uuid::now_v7();
Ellenőrzés
use uuid::Uuid;
let ok = Uuid::parse_str(v4.to_string().as_str()).is_ok();
Java
Generálás
import java.util.UUID;
UUID id = UUID.randomUUID(); // v4
UUID v7 (Unix idő + véletlen)
// Maven: com.github.f4b6a3:uuid-creator
import com.github.f4b6a3.uuid.UuidCreator;
UUID v7 = UuidCreator.getTimeOrderedEpoch(); // UUIDv7
Ellenőrzés
import java.util.UUID;
try { UUID.fromString(id.toString()); /* valid */ } catch (IllegalArgumentException ex) { /* invalid */ }