Generatore UUID Gratuito - Crea UUID V1 e V4 Istantaneamente
Genera identificatori unici istantaneamente con il nostro generatore UUID gratuito. Crea UUID Versione 1 (basati sul tempo) e Versione 4 (casuali) per database, API e sistemi distribuiti.
Generatore UUID
Documentazione
Generatore di UUID
Un generatore di UUID è uno strumento che crea un identificatore univoco universale, o UUID: un codice di 128 bit usato per etichettare un dato in modo che sia estremamente improbabile che un altro elemento, ovunque si trovi, condivida la stessa etichetta. Questa pagina genera UUID di versione 1 (basati sul tempo) e di versione 4 (casuali).
Che cos'è un UUID?
Un UUID è un numero di 128 bit scritto come 32 cifre esadecimali (i caratteri da 0 a 9 e da a a f). È diviso in cinque gruppi separati da trattini, secondo lo schema 8-4-4-4-12, per un totale di 36 caratteri. Un UUID di esempio è il seguente:
1550e8400-e29b-41d4-a716-446655440000
2Gli UUID sono definiti dalla RFC 9562, pubblicata dall'Internet Engineering Task Force a maggio 2024, che ha sostituito la precedente RFC 4122 del 2005. Entrambi i documenti descrivono lo stesso formato a 128 bit. I software li usano per identificare righe di database, file, sessioni utente e altri record senza dover ricorrere a un'autorità centrale che assegni i numeri. Poiché l'insieme degli UUID possibili è molto grande, due computer possono generare UUID in modo indipendente, nello stesso momento, e quasi mai produrre lo stesso valore.
Formato e struttura di un UUID
I 128 bit di un UUID sono divisi in campi denominati. Ogni campo occupa un numero fisso di bit:
time_low- 32 bittime_mid- 16 bittime_hi_and_version- 16 bitclock_seq_hi_and_reserved- 8 bitclock_seq_low- 8 bitnode- 48 bit
Quattro bit all'interno di time_hi_and_version contengono il numero di versione dell'UUID e due bit all'interno di clock_seq_hi_and_reserved contengono la variante, che indica al software come leggere i campi rimanenti. Sono definite otto versioni.
I nomi dei campi sopra riportati provengono dalla versione 1, nella quale contengono effettivamente un valore temporale e un valore di nodo. Le altre versioni mantengono la stessa disposizione 8-4-4-4-12 e gli stessi limiti dei campi, ma riempiono la maggior parte dei bit con dati casuali. In un UUID di versione 4, il gruppo denominato time_low contiene dati casuali, non un valore temporale.
Come generare un UUID con questo strumento
- Scegliere una versione: versione 1 (basata sul tempo) o versione 4 (casuale).
- Leggere l'UUID nel riquadro dei risultati. Ne appare uno nuovo non appena la pagina viene caricata o cambia la versione.
- Selezionare "Genera" per crearne un altro.
- Selezionare "Copia" per copiare il risultato negli appunti, quindi incollarlo nel codice, in un database o in un file di configurazione.
Il pannello sotto il risultato divide l'UUID nei suoi cinque campi e assegna un nome a ciascuno, così è facile individuare la cifra della versione e quella della variante.
La versione 4 è adatta alla maggior parte degli utilizzi, comprese le chiavi di database e i token di sessione, perché non contiene informazioni su quando o dove è stata generata. La versione 1 è adatta ai record per i quali l'ora di creazione deve poter essere ricavata dall'identificatore stesso, come le voci di registro.
UUID di versione 1 e versione 4 a confronto
Versione 1 codifica il timestamp corrente, oltre a una sequenza di clock e a un valore di nodo scelti casualmente. Lo standard consente che il valore di nodo sia l'indirizzo di rete reale (MAC) di un computer, ma consente anche un valore di nodo generato casualmente come alternativa che tutela la privacy. Questo strumento usa sempre l'opzione casuale: i suoi UUID di versione 1 non leggono né espongono mai un indirizzo MAC reale. Lo standard richiede inoltre che il bit meno significativo del primo byte del campo del nodo sia impostato a 1 quando il valore del nodo è casuale, e questo strumento lo imposta. Le schede di rete reali non hanno mai quel bit impostato, quindi un nodo casuale non può essere scambiato per uno reale. Per questo la seconda cifra esadecimale del quinto gruppo è sempre dispari in un UUID di versione 1 generato da questa pagina: 1, 3, 5, 7, 9, b, d o f.
Il timestamp contenuto in un UUID di versione 1 può essere recuperato, permettendo di ordinare i record in base alla creazione. L'ordinamento del testo dell'UUID non produce questo risultato, perché il primo gruppo contiene i 32 bit meno significativi del timestamp, che ricominciano da capo circa ogni 7 minuti. La versione 6, aggiunta dalla RFC 9562, memorizza lo stesso timestamp mettendo prima i bit più significativi, così l'ordinamento del testo semplice funziona.
La versione 4 è costruita a partire da bit casuali, con alcuni bit fissi che indicano la versione e la variante. Non contiene un timestamp né dati specifici della macchina, quindi non rivela quando o dove è stata creata. Non può essere ordinata in base all'ordine di creazione.
Nello standard esistono altre sei versioni, ma questo strumento non le genera: la versione 2 (DCE Security, usata raramente); le versioni 3 e 5, costruite calcolando l'hash di uno spazio dei nomi e di un nome con MD5 o SHA-1, per cui lo stesso input produce sempre lo stesso UUID; e le versioni 6, 7 e 8, aggiunte dalla RFC 9562 nel 2024 per identificatori ordinabili e personalizzati.
Come calcolare un UUID (formula)
Versione 4:
- Generare 128 bit casuali.
- Impostare a
0100(esadecimale4) i quattro bit della versione, cioè la prima cifra esadecimale del terzo gruppo. - Impostare a
10i due bit più significativi del quarto gruppo (in modo che la prima cifra esadecimale di quel gruppo sia8,9,aob).
Solo 122 dei 128 bit sono effettivamente casuali, perché 6 bit sono fissi dai passaggi 2 e 3. Questo produce 2^122, cioè circa 5,3 × 10^36, UUID di versione 4 possibili.
Versione 1:
- Prendere l'ora corrente come numero di intervalli di 100 nanosecondi trascorsi dal 15 ottobre 1582, data della riforma del calendario gregoriano. In pratica, si tratta dell'ordinario tempo Unix in millisecondi più 12.219.292.800.000, il tutto moltiplicato per 10.000.
- Dividere questo conteggio di 60 bit in tre campi: i 32 bit meno significativi vanno in
time_low, i 16 successivi intime_mide i 12 più significativi intime_hi_and_version. - Generare una sequenza di clock di 14 bit, usata per evitare collisioni se l'orologio del sistema viene spostato indietro.
- Generare un valore di nodo di 48 bit, impostando a 1 il bit meno significativo del suo primo byte.
- Impostare a
0001i bit della versione e a10quelli della variante.
Considerando tutte le versioni di UUID, l'intero spazio a 128 bit contiene 2^128, cioè circa 3,4 × 10^38, valori possibili. Il numero è così grande che le collisioni casuali non costituiscono un problema pratico.
Esempio svolto
Lettura di un UUID di versione 4. Si consideri l'esempio precedente: 550e8400-e29b-41d4-a716-446655440000.
- Terzo gruppo,
41d4: la prima cifra è4, che indica un UUID di versione 4. - Quarto gruppo,
a716: la prima cifra,a(binario1010), inizia con10, i bit di variante richiesti. - Le altre cifre esadecimali sono il contenuto casuale.
Un programma che legge questo UUID controlla il 4 e lo schema 10 per confermare il formato, quindi tratta il resto come un valore casuale opaco.
Costruzione di un UUID di versione 1. Si supponga che l'orologio indichi 1.700.000.000.000 millisecondi di tempo Unix, corrispondenti al 14 novembre 2023, alle 22:13:20 UTC.
- Aggiungere l'offset: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
- Moltiplicare per 10.000 per ottenere intervalli di 100 nanosecondi: 139.192.928.000.000.000. In esadecimale il valore è
01EE833B04AFC000. - Dividere il valore:
time_low=04AFC000(le 8 cifre esadecimali meno significative),time_mid=833B(le 4 successive) e i 12 bit più significativi sono1EE. - Inserire la cifra della versione
1davanti a1EE, ottenendotime_hi_and_version=11EE.
L'UUID sarà quindi 04afc000-833b-11ee-, seguito dalla sequenza di clock e dal valore di nodo. Il software può invertire questi quattro passaggi per recuperare la data del 14 novembre 2023 dall'identificatore.
Usi comuni degli UUID
- Chiavi primarie nei database, soprattutto quando più server creano record nello stesso momento senza comunicare tra loro.
- Token di sessione e chiavi API, di solito di versione 4 per la privacy che offrono.
- Identificatori per file, eventi e risorse nei sistemi distribuiti, come i microservizi.
- ID dei dispositivi nelle grandi reti IoT, dove ogni dispositivo può generare il proprio ID senza connessione.
Il principale svantaggio è la dimensione: un UUID richiede 16 byte di memoria, contro i 4 o 8 byte di un semplice contatore intero, e alcuni database indicizzano gli UUID più lentamente degli interi sequenziali.
Alternative agli UUID
Gli interi con incremento automatico sono più piccoli e semplici, ma non funzionano bene quando più di un server deve assegnare ID in modo indipendente. Gli ID Snowflake, sviluppati da Twitter, combinano un timestamp con un ID del worker per produrre identificatori compatti e ordinabili in un sistema distribuito. Gli ULID (identificatori universalmente univoci e ordinabili lessicograficamente) sono un formato più recente, progettato per essere sia casuale sia ordinabile in base all'ora di creazione, a differenza di un UUID standard di versione 4.
Storia dello standard UUID
Il concetto di UUID è nato negli anni 1980 presso Apollo Computer, nell'ambito del suo Network Computing System. In seguito la Open Software Foundation ha adottato il formato per il suo Distributed Computing Environment. L'Internet Engineering Task Force ha pubblicato la RFC 4122 nel 2005 e l'ha sostituita con la RFC 9562 a maggio 2024. La RFC 9562 mantiene inalterato il funzionamento di tutte le versioni precedenti e aggiunge le versioni 6, 7 e 8.
Domande frequenti
A cosa serve un generatore di UUID?
Crea identificatori univoci per database, sistemi distribuiti, token di sessione, chiavi API e ID dei dispositivi, così non è necessario che due record condividano lo stesso identificatore.
Qual è la differenza tra UUID v1 e v4?
La versione 1 codifica un timestamp che il software può recuperare per ricavare l'ora di creazione. La versione 4 è completamente casuale e non contiene alcun timestamp. L'output di versione 1 di questo strumento usa un valore di nodo generato casualmente invece di un indirizzo MAC reale, quindi non espone neppure informazioni identificative della macchina.
La versione 1 espone il mio indirizzo MAC?
Non con questo strumento. Lo standard consente che il campo del nodo di un UUID di versione 1 contenga un indirizzo MAC reale, ma questo generatore riempie sempre quel campo con bit casuali e imposta il bit che indica che il valore non è un indirizzo di rete reale.
Gli UUID sono garantiti come univoci?
No, nessuno schema di identificazione può garantire l'univocità assoluta, ma lo spazio a 128 bit contiene circa 3,4 × 10^38 valori possibili e un UUID di versione 4 ha circa 5,3 × 10^36 valori casuali possibili. La probabilità di un duplicato è abbastanza piccola da poter essere ignorata in quasi tutti gli utilizzi pratici.
Posso usare un UUID come chiave primaria di un database?
Sì. Gli UUID funzionano bene come chiavi primarie nei sistemi distribuiti, perché ogni nodo può generarne uno senza contattare un server centrale. Il costo è di 16 byte di memoria per chiave, più di un intero tipico, con prestazioni potenzialmente inferiori per gli indici nelle tabelle molto grandi.
Un UUID è la stessa cosa di un GUID?
Sì. GUID (identificatore univoco globale) è il nome usato da Microsoft per lo stesso concetto definito dalla RFC 4122 come UUID.
Gli UUID di versione 4 possono essere ordinati in base all'ora di creazione?
No. Gli UUID di versione 4 sono casuali, quindi non contengono informazioni su quando sono stati creati. Un UUID di versione 1 invece le contiene, ma deve prima essere decodificato; ordinare il testo non restituisce l'ordine di creazione. La versione 6, la versione 7 e gli ULID sono progettati per essere ordinati direttamente come testo.
Riferimenti
- Davis, K., Peabody, B. e Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. e Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Universally unique identifier. In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. GitHub. https://github.com/ulid/spec