UUID v1 vs v4 vs v5: Quale versione dovresti usare?
Risposta rapida
Utilizza UUID v4 (casuale) per impostazione predefinita: non necessita di coordinamento e presenta un rischio di collisione trascurabile. Utilizza v1 (basato sul tempo) solo quando hai bisogno di ID ordinabili in base al tempo e puoi proteggere l'ID del nodo. Utilizza v5 (spazio dei nomi+nome) quando sono necessari ID deterministici derivati da un nome. Genera qualsiasi versione con il nostro generatore UUID gratuito.
Introduzione
Un UUID (Universally Unique Identifier) è un identificatore a 128 bit reso come 36 caratteri in gruppi esadecimali 8-4-4-4-12, ad es. 123e4567-e89b-12d3-a456-426614174000. RFC 9562 definisce diverse versioni; i tre che incontrerai di più sono v1 (tempo + MAC), v4 (casuale) e v5 (spazio dei nomi + nome, SHA-1). Ciascuno di essi effettua diversi compromessi tra garanzie di unicità, ordinabilità e determinismo.
Passo dopo passo
-
UUID v1 —basato su tempo e nodo
v1 codifica l'attuale timestamp a 60 bit (intervalli di 100 ns dal 1582-10-15) e un ID nodo a 48 bit (solitamente l'indirizzo MAC). Gli ID generati sullo stesso nodo sono monotonicamente crescenti e ordinabili nel tempo. Rischio: l'indirizzo MAC fa trapelare l'identità dell'hardware e lo sfasamento dell'orologio tra i nodi può interrompere l'ordine.
-
UUID v4 —casuale
v4 utilizza 122 bit casuali (6 bit sono fissi per la versione/variante). Con 122 bit casuali, la probabilità di una collisione tra 2,71 trilioni di ID è del 50%: per qualsiasi carico di lavoro realistico la probabilità è effettivamente pari a zero. v4 non necessita di coordinamento e non rivela informazioni sull'host, rendendolo l'impostazione predefinita più sicura.
-
UUID v5 —spazio dei nomi e nome (SHA-1)
v5 esegue l'hashing di uno spazio dei nomi UUID e di una stringa del nome con SHA-1 per produrre un ID deterministico a 128 bit. La stessa coppia (spazio dei nomi, nome) produce sempre lo stesso UUID, che è ideale per la deduplicazione e gli ID stabili derivati da chiavi naturali. v3 è la stessa idea ma usa MD5 (evitatelo).
-
Confronta i compromessi
v1 è ordinabile ma perde il MAC e necessita della sincronizzazione dell'orologio. v4 è casuale e privato ma non ordinabile. v5 è deterministico e deduplica ma non è casuale: indovinare il nome consente a un utente malintenzionato di riprodurre UUID. Scegli in base alla tua necessità di ordine, casualità o determinismo.
-
Scegli la versione giusta per il tuo caso
Chiavi primarie del database: v4 (o v7 nei sistemi più recenti per l'ordinabilità temporale). Sistemi distribuiti senza coordinamento: v4. ID deterministici da una chiave naturale (es. URL →UUID): v5. Log di controllo che beneficiano dell'ordine temporale: v1 con un ID nodo casuale protetto.
Esempi
UUID v1 (basato sul tempo, ordinabile)
Ingresso: Generato alle 2026-08-28T12:00:00Z sul nodo 00:11:22:33:44:55
Produzione: 1ef7c1d0-2d3b-11f0-8000-001122334455 (cifra versione '1', ordinabile in base all'ora)
UUID v4 (casuale)
Ingresso: Random generation
Produzione: f47ac10b-58cc-4372-a567-0e02b2c3d479 (cifra versione '4', bit casuali)
UUID v5 (deterministico da spazio dei nomi+nome)
Ingresso: Spazio dei nomi DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + nome 'freeonlinetoolsgo.com'
Produzione: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f (lo stesso input produce sempre lo stesso output)
Problemi comuni
- Memorizzazione degli UUID come VARCHAR(36) invece che come tipo BINARY/UUID nativo a 16 byte: questo spreca il doppio dello spazio di archiviazione e interrompe le prestazioni dell'indice. Utilizza un tipo di colonna nativo UUID, ove disponibile.
- Utilizzo di v1 senza proteggere l'ID del nodo: l'indirizzo MAC predefinito fa trapelare l'identità dell'hardware e rappresenta un problema di privacy. Sostituirlo con un valore crittograficamente casuale a 48 bit per nodo.
- Supponendo che le collisioni v4 siano impossibili: non lo sono: sono semplicemente astronomicamente improbabili. Con 122 bit casuali, sono necessari circa 2,71 trilioni di ID per una probabilità del 50%. Per 1 miliardo di ID la probabilità è ~0,0000000000000001.
- Utilizzo di v3 (basato su MD5) invece di v5 (basato su SHA-1): MD5 non funziona, quindi è preferibile v5. Entrambi sono deterministici, ma la v5 ha una maggiore resistenza alle collisioni.
Suggerimenti
- L'impostazione predefinita è v4 per quasi tutti i casi d'uso: è casuale, privata e a prova di collisione senza alcun coordinamento.
- Se hai bisogno di ID casuali ordinabili in base al tempo, guarda UUID v7 (RFC 9562, 2024) che combina un timestamp Unix con bit casuali, migliore della v1 per i database moderni.
- Utilizza v5 per generare ID stabili da chiavi naturali (URLs, indirizzi email) in modo che lo stesso input sia sempre associato allo stesso UUID — utile per la deduplicazione e idempotente APIs.
- Genera UUID sul client quando possibile per evitare un viaggio di andata e ritorno al server: il nostro generatore UUID viene eseguito interamente nel tuo browser utilizzando crypto.getRandomValues().