Generare un UUID
La v4 è pura casualità; la v7 mette 48 bit di marca temporale in testa, il che rende gli identificativi crescenti nel tempo — e questo cambia tutto per un indice di database.
L'estrazione usa crypto.randomUUID() o crypto.getRandomValues(), l'API crittografica del browser. Nulla viene inviato né conservato.
Come funziona il controllo
- 1
Scegliete la versione
v4 per un identificativo senza ordine né significato. v7 quando gli identificativi fanno da chiave primaria o da indice: si ordinano naturalmente per data di creazione.
- 2
L'estrazione è crittografica
122 bit di casualità per la v4. La collisione è teoricamente possibile e praticamente irraggiungibile: servirebbero miliardi di identificativi al secondo per un secolo.
- 3
I bit di versione e variante vengono impostati
Un UUID conforme porta il numero di versione al 13° carattere esadecimale e la variante al 17°. Un generatore che li dimentica produce una stringa che sembra un UUID senza esserlo.
Perché la v7 è spesso una chiave primaria migliore
Un indice B-tree preferisce inserimenti ordinati. Con UUID v4 ogni inserimento cade in un punto casuale dell'indice, frammenta le pagine e gonfia il volume scritto. Con la v7 le nuove righe si accodano in fondo, come un identificativo auto-incrementale.
Il prezzo: un UUID v7 rivela l'istante di creazione al millisecondo. Nella maggior parte dei casi non è un segreto, ma se l'ordine di creazione è di per sé sensibile la v4 resta la scelta giusta.
Domande frequenti
Due UUID possono essere identici?
Matematicamente sì, praticamente no. Un UUID v4 porta 122 bit di casualità: generarne un miliardo al secondo per cento anni lascerebbe comunque una probabilità di collisione trascurabile. La vera fonte di duplicati è un generatore mal implementato che non usa una sorgente crittografica.
Che differenza c'è tra v1, v4 e v7?
La v1 combina marca temporale e indirizzo MAC della macchina, quindi rivela hardware. La v4 è pura casualità. La v7, normata dalla RFC 9562, mantiene l'ordine temporale della v1 senza esporre l'hardware: oggi è il miglior compromesso per una chiave primaria.
Meglio salvare un UUID come testo o in binario?
In binario dove il database lo consente: 16 byte contro 36 caratteri, meno della metà dello spazio in ogni indice. PostgreSQL ha un tipo uuid nativo; MySQL usa BINARY(16) con UUID_TO_BIN(). In testo, quello spazio si paga su ogni riga e ogni voce d'indice.
Lo stesso controllo via API
Questo strumento gira nel vostro browser. Per lo stesso controllo dal vostro codice, in blocco o lato server, l'API risponde in JSON.
Vedi la documentazione