Che cos’è un UUID?
Un UUID (Universally Unique Identifier) è un valore a 128 bit rappresentato come stringa di 36 caratteri, ad esempio 550e8400-e29b-41d4-a716-446655440000. Il formato e la semantica delle versioni sono definiti dalla RFC 4122 per v1–v5 e dalla RFC 9562 per le più recenti v6, v7 e v8. Questo strumento genera v4 (puramente casuale), v1 (timestamp più ID nodo casuale) e v7 (prefisso con timestamp Unix in millisecondi più suffisso casuale, ordinabile per istante di generazione) — tutto nel tuo browser, tramite l'API Web Crypto della piattaforma. Nessun dato viene inviato a un server.
Come funziona la generazione di UUID?
Ogni versione bilancia in modo diverso determinismo, ordinabilità ed entropia. Lo strumento sceglie l’algoritmo giusto in base alla tua selezione:
- v4 (casuale) richiama
crypto.randomUUID()del browser, che restituisce 122 bit di casualità crittografica, con i 6 bit fissi (versione0100e variante10) impostati nelle posizioni corrette. Le collisioni sono astronomicamente improbabili — per imbattersi in un solo duplicato con probabilità del 50% bisognerebbe generare circa 2,71 quintilioni di UUID v4. - v1 (timestamp + nodo) impacchetta un timestamp gregoriano da 60 bit (tick di 100 nanosecondi dal 15-10-1582) in
time_low/time_mid/time_hi_and_version, imposta il nibble di versione a0001, sceglie una clock sequence di 14 bit con i bit di variante impostati e usa un ID nodo casuale a 48 bit con il bit multicast forzato a 1 (la RFC 4122 §4.5 consente esplicitamente un ID nodo casuale quando non c'è un MAC hardware — il bit multicast lo etichetta come non-MAC). - v7 (timestamp ordinabile), secondo la RFC 9562 §5.7, dispone prima un timestamp Unix a 48 bit big-endian in millisecondi, poi la versione a 4 bit
0111, quindi 12 bit casuali, poi la variante a 2 bit10e ulteriori 62 bit casuali. Poiché il timestamp si trova nei bit più significativi, gli UUID v7 si ordinano lessicograficamente seguendo l'ordine di generazione — proprietà che nessuna altra versione di UUID offre senza codifiche aggiuntive. - Tutta la casualità proviene da
crypto.getRandomValues(), il RNG crittograficamente sicuro del browser. Sia v1 sia v7 includono una protezione di monotonicità all'interno dello stesso tick, in modo che due chiamate consecutive nello stesso tick di clock ordinino comunque la seconda sopra la prima — importante per generazioni in blocco più rapide del clock al millisecondo. - Dopo la generazione parte la pipeline di formattazione. Puoi rimuovere i trattini, passare al maiuscolo, racchiudere il valore tra parentesi graffe (
{…}— la convenzione GUID di Microsoft) o rappresentare i 16 byte grezzi in base64 (output di 22 caratteri, senza padding). La modalità base64 ha la precedenza sulle altre opzioni di formato perché base64 è una rappresentazione a sé stante.
Perché usare questo generatore UUID?
- Nulla esce dal tuo browser. L'API Web Crypto gira in locale; dopo il caricamento iniziale del documento la pagina non effettua alcuna richiesta di rete. Apri i DevTools, clicca su Genera e il pannello Rete resterà silenzioso.
- Output conforme alle RFC. v4 segue la RFC 4122 §4.4, v1 segue §4.2 e §4.5, e v7 segue la RFC 9562 §5.7. Il nibble di versione e i bit di variante sono collocati dove gli standard prescrivono — ogni UUID passa la regex canonica della propria versione.
- v7 ordinabile per chiavi di database. Un UUID v7 usato come chiave primaria clustered in Postgres, MySQL o SQL Server tiene gli insert in append sull'indice — niente page split, niente I/O casuale — pur restando globalmente unico. v4 non può farlo perché i suoi bit sono casuali.
- Generazione in blocco senza rate limit. Genera 1, 10, 100 o 1.000 UUID per volta. Niente quote, niente registrazione — lo strumento gira nel tuo tab, quindi il tetto è la tua CPU, non il piano API di un fornitore.
Quali sono le applicazioni comuni degli UUID?
Gli UUID compaiono ovunque un sistema abbia bisogno di un identificatore globalmente unico senza coordinarsi con un’autorità centrale:
- Chiavi primarie di database. Gli interi auto-incrementali fanno trapelare il conteggio delle righe e rompono lo sharding. Gli UUID sono stabili tra shard, sicuri da unire tra regioni e (con v7) mantengono gli insert nel B-tree caldi senza page split. Un'applicazione tipica genera l'UUID lato client, lo inserisce nell'INSERT e non deve mai fare round-trip al server per ottenere la chiave.
- ID di correlazione delle richieste. Un middleware HTTP allega a ogni richiesta in ingresso un UUID v4, lo registra in ogni span e lo propaga a valle (spesso come header
X-Request-Id). Quando un cliente segnala un bug, il tecnico di supporto incolla l'ID e l'intero trace della richiesta — tra servizi e fusi orari — emerge senza ambiguità. - Chiavi di idempotenza. Le API di pagamento (Stripe, Adyen, Square) accettano un header
Idempotency-Keyin modo che una richiesta riprovata non addebiti mai il cliente due volte. Un UUID generato lato client garantisce che la chiave sia univoca per ogni operazione logica, cioè esattamente il contratto richiesto da queste API.
Com’è fatto un esempio di UUID?
In Node.js o in un browser moderno, la one-liner crypto.randomUUID() restituisce un nuovo UUID v4 — ad esempio 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Usalo come ID di richiesta o chiave di idempotenza. Quando l'UUID finisce in una colonna di database che farà da chiave primaria clustered, genera invece v7: due valori v7 prodotti a un millisecondo di distanza, come 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 e 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, si ordinano lessicograficamente nell'ordine di generazione. Il tipo uuid di Postgres memorizza entrambe le versioni in modo identico — la differenza emerge al momento della scrittura dell'indice, dove v7 si accoda a destra del B-tree mentre v4 disperde gli insert e impone I/O casuale.
Questo generatore di UUID fa una cosa sola: trasformare un clic in uno o più identificatori conformi alle RFC, formattati come ti servono, senza inviare la tua richiesta a nessun server. Scegli una versione, scegli una quantità, scegli un formato — genera, copia, prosegui.