A cosa servono gli UUID
Un UUID (Universally Unique Identifier), chiamato anche GUID negli ecosistemi Microsoft, è un valore a 128 bit scritto in forma testuale standard, ad esempio:
550e8400-e29b-41d4-a716-446655440000
I sistemi usano gli UUID quando servono identificatori estremamente improbabili da far collidere senza un allocatore centrale: chiavi primarie in servizi distribuiti, ID di messaggio, handle di upload e nomi di risorse nelle API. L’unicità è probabilistica (o derivata da nomi), non dimostrata da una lookup su un registro globale a ogni creazione di ID.
Genera un esempio con Genera UUID, poi controlla formato e campi di versione con Valida UUID.
Subtool di questa famiglia
- Genera UUID — crea UUID nelle versioni 1, 3, 4 o 5, con input opzionali di namespace e name dove quelle versioni li richiedono.
- Valida UUID — verifica che una stringa rispetti il layout UUID e riporta considerazioni di validità per le versioni da 1 a 5.
Generazione e validazione sono complementari: crea ID nella versione attesa dallo schema, poi valida stringhe fornite dall’utente o importate prima di accettarle come chiavi esterne o di cache.
Versioni che incontrerai davvero
Versione 4 (casuale). La scelta più comune per nuovi ID applicativi. La maggior parte dei bit è casuale da un CSPRNG; i bit di versione e variante sono fissati secondo RFC 4122. Le collisioni sono trascurabili ai volumi pratici se il generatore è solido.
Versione 1 (basata sul tempo). Incorpora un timestamp e un identificatore di nodo (storicamente un indirizzo MAC). Utile se vuoi un ordinamento temporale approssimativo, ma può rivelare l’ora di creazione e l’identità della macchina — nei contesti sensibili alla privacy spesso si preferiscono v4 o schemi più recenti.
Versione 3 (basata su nome con MD5) e versione 5 (basata su nome con SHA-1). Derivano un UUID da un namespace UUID più una stringa name. Lo stesso namespace+name produce sempre lo stesso UUID: comodo per ID stabili da URL o username senza tabella di lookup. Per i nuovi progetti v5 è preferibile a v3 perché la derivazione usa SHA-1 invece di MD5.
Altre versioni e proposte successive (ad esempio UUIDv7 ordinabile per tempo in RFC più recenti) compaiono negli stack moderni; quando la piattaforma documenta una versione specifica, seguila invece di inventare un mix.
Formato testo e bit di variante
Il testo canonico usa cinque gruppi esadecimali 8-4-4-4-12. I parser devono accettare hex maiuscolo o minuscolo. Il nibble di versione è nel terzo gruppo; i bit di variante nel quarto. Una validazione che controlla solo «sembra hex con trattini» è più debole di una che verifica anche la coerenza versione/variante per il tipo dichiarato.
Alcune API accettano la forma URN (urn:uuid:…) o GUID tra parentesi graffe {…}. Normalizza prima del confronto. Lo storage binario è di 16 byte; la forma testuale è per umani e JSON.
Scegliere gli ID con giudizio
Quando gli UUID aiutano. Chiavi primarie amichevoli con i merge, minting di ID offline, nascondere ai client i contatori di riga sequenziali.
Quando danneggiano. Chiavi primarie casuali enormi possono frammentare gli indici B-tree rispetto agli interi sequenziali — misura sul tuo database. Logging e supporto diventano più difficili se ogni ID è opaco; abbina numeri di caso leggibili quando gli operatori ne hanno bisogno.
Stabilità. Per v3/v5 basati su nome, documenta il namespace UUID su cui la tua organizzazione si standardizza (DNS, URL, OID o una radice personalizzata). Cambiare il namespace riminta silenziosamente un ID diverso per lo stesso name.
Note di sicurezza
I valori UUIDv4 sono identificatori, non segreti di autenticazione. Indovinare un ID v4 non elencato è comunque difficile — non trattarlo come autorizzazione di per sé; applica sempre il controllo degli accessi. Evita v1 se bit di nodo derivati da MAC rivelerebbero l’identità hardware su documenti pubblici. Non incorporare password o PAN nelle stringhe name per v3/v5.
Errori comuni
- Generare v4 ma salvare solo la prima metà «per risparmiare spazio», distruggendo le garanzie di unicità.
- Confronti di stringhe case-sensitive tra sistemi che normalizzano in modo diverso.
- Usare l’UUID nil (
00000000-0000-0000-0000-000000000000) come chiave reale di entità. - Assumere che validare il formato implichi che l’ID esista nel database.
- Mischiare più generatori con politiche di versione diverse per la stessa colonna.
Limiti e ambiente
Questi strumenti aiutano a creare e ispezionare UUID in stile RFC nel browser per sviluppo e formazione. Non allocano ID dalle sequenze del database di produzione né garantiscono unicità globale con RNG difettosi.
Riepilogo
Gli UUID forniscono identificatori a 128 bit in forma hex standard, con versioni per generazione casuale, basata sul tempo e basata sul nome. Questo hub abbina un generatore multi-versione a un validatore così puoi creare ID conformi allo schema e rifiutare presto le stringhe malformate. Preferisci v4 per uso generale, v5 per ID stabili derivati da nomi, e applica sempre l’autorizzazione separatamente dall’opacità dell’identificatore.