Gli UUID spiegati: v4, v7 e come scegliere la versione giusta

Aggiornato:

Un UUID è un identificatore a 128 bit che qualsiasi computer può creare da solo, senza un contatore centrale, con la certezza pratica che nessun altro ne abbia creato uno identico. Per questo finisce per essere usato come chiave di database, nome di file, ID di richiesta o numero d’ordine. La maggior parte degli UUID che vedi è di versione 4, cioè pura casualità; la versione 7, standardizzata nel 2024, aggiunge il momento della creazione e sta rapidamente diventando la scelta migliore per i database. Questa guida spiega come leggerne uno, in cosa differiscono le versioni, quanto è davvero probabile una collisione e quale scegliere.

Com’è fatto un UUID

Un UUID è lungo 128 bit e si scrive come 32 cifre esadecimali divise in cinque gruppi separati da trattini — 8, 4, 4, 4 e 12 cifre, 36 caratteri in tutto:

Lo standard attuale è la RFC 9562, pubblicata nel maggio 2024, che ha sostituito la RFC 4122 del 2005. Le lettere si possono scrivere in maiuscolo, in minuscolo o mescolando le due forme: in tutti e tre i casi il valore è lo stesso.

I database con un tipo UUID nativo, come PostgreSQL, memorizzano il valore in 16 byte anziché come 36 caratteri di testo.

Come leggere la versione

Due cifre indicano che tipo di UUID hai davanti. La prima cifra del terzo gruppo è la versione. La prima cifra del quarto gruppo è la variante: in ogni UUID conforme allo standard è 8, 9, a o b.

UUIDVersioneChe cos’è
3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b904Casuale
01a0d86f-ca00-7b3e-9f21-6c4d8a0e5b177Ordinato per tempo, creato il 25 settembre 2026 alle 12:00:00 UTC
00000000-0000-0000-0000-000000000000—Il Nil UUID: tutti i bit a zero, usato per indicare «nessun valore»
ffffffff-ffff-ffff-ffff-ffffffffffff—Il Max UUID: tutti i bit a uno, usato come limite superiore

Le versioni

VersioneCome viene generatoUso oggi
1Timestamp e indirizzo di rete (MAC) del computerSuperata: rivela quale macchina ha generato l’UUID
3Hash MD5 di un namespace e di un nomeSolo per riprodurre ID esistenti; meglio la versione 5
4122 bit casualiLa scelta predefinita quasi ovunque
5Hash SHA-1 di un namespace e di un nomeLo stesso nome dà sempre lo stesso UUID
6La versione 1 riorganizzata in modo da ordinarsi per tempoSolo dove la versione 1 è già in uso
7Timestamp Unix in millisecondi più bit casualiNuovi database e tutto ciò che trae vantaggio dall’ordine temporale
8Struttura definita dall’applicazioneFormati sperimentali o specifici di un produttore

La versione 2 esiste per un vecchio sistema di sicurezza ed è fuori dall’ambito dello standard. La RFC 9562 afferma che, dove possibile, le implementazioni dovrebbero usare la versione 7 al posto delle versioni 1 e 6.

Versione 4: casuale

Un UUID di versione 4 fissa 6 dei suoi 128 bit per indicare versione e variante, e riempie gli altri 122 con dati casuali. Lo standard chiede un generatore di numeri casuali crittograficamente sicuro, ed è proprio ciò che i browser offrono con crypto.randomUUID() — la funzione usata dal generatore di nTools.

Con 122 bit casuali, le collisioni non sono un problema pratico. La probabilità che due UUID qualsiasi coincidano raggiunge il 50% solo dopo circa 2,7 × 10¹⁸ UUID — a un miliardo al secondo, servirebbero circa 86 anni. Dopo mille miliardi di UUID, la probabilità che due di essi siano uguali è di circa 1 su 10.000 miliardi. Il rischio reale è un generatore di numeri casuali difettoso, non la matematica.

Generatore UUID

Versione 7: ordinata per tempo

Un UUID di versione 7 mette nei primi 48 bit il tempo Unix in millisecondi, poi la versione e la variante, poi 74 bit di casualità o un contatore. Poiché il tempo viene per primo, gli UUID creati più tardi si ordinano dopo quelli precedenti, sia come testo sia come byte.

Nell’esempio qui sopra, le prime 12 cifre esadecimali, 01a0d86fca00, corrispondono a 1.790.337.600.000 millisecondi dopo il 1° gennaio 1970: il 25 settembre 2026 alle 12:00:00 UTC. Il timestamp a 48 bit basta fino all’anno 10889. All’interno dello stesso millisecondo, i generatori usano bit casuali oppure aggiungono un contatore, in modo che gli UUID dello stesso processo escano comunque in ordine.

Il supporto sta arrivando negli strumenti di uso comune: PostgreSQL 18, rilasciato a settembre 2025, ha aggiunto una funzione integrata uuidv7() accanto a uuidv4().

Quale usare come chiave di un database

La maggior parte dei database conserva le chiavi primarie in un indice B-tree, che resta efficiente quando le nuove chiavi arrivano in ordine.

Per una nuova tabella che ha bisogno di UUID, di solito la versione 7 è la scelta migliore. La versione 4 resta quella giusta quando il momento della creazione non deve essere ricavabile dall’ID.

Cosa non è un UUID

Domande frequenti

Due UUID casuali possono mai essere uguali?

In teoria sì; in pratica no. Servirebbero circa 2,7 × 10¹⁸ UUID di versione 4 per avere il 50% di probabilità di una sola coincidenza, a patto che provengano da un generatore di numeri casuali adeguato.

Un GUID è la stessa cosa di un UUID?

Sì. GUID è il nome usato da Microsoft per lo stesso identificatore a 128 bit. Gli strumenti di Windows lo mostrano spesso in maiuscolo o racchiuso tra parentesi graffe, come {3F2A9C1E-5B7D-4E8A-9C21-7D4E5F6A8B90}, ma il valore è lo stesso.

Gli UUID distinguono tra maiuscole e minuscole?

No. 3F2A9C1E-… e 3f2a9c1e-… sono lo stesso UUID. Confrontali senza distinguere tra maiuscole e minuscole, oppure memorizzali in una colonna UUID nativa, che elimina il problema.

Quale versione crea il generatore di nTools?

La versione 4, tramite la funzione crypto.randomUUID() del browser. Ne crea fino a 100 alla volta, interamente sul tuo dispositivo.

Guide correlate