Vai al contenuto

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

Versione UUID
UUID generato
Calcolatore di caricamento...
📚

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 improbabile che qualsiasi altro elemento, ovunque, abbia 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 0-9 e a-f). È suddiviso in cinque gruppi separati da trattini, secondo lo schema 8-4-4-4-12, per 36 caratteri in totale. Un esempio di UUID ha questo aspetto:

1550e8400-e29b-41d4-a716-446655440000
2

Gli UUID sono definiti da uno standard dell'Internet Engineering Task Force. La prima versione di quello standard, la RFC 4122, fu pubblicata a luglio 2005. È stata sostituita a maggio 2024 dalla RFC 9562, che rende obsoleta la RFC 4122 e aggiunge nuove versioni. Il software usa gli UUID per identificare righe di database, file e altri record senza bisogno di un'autorità centrale che assegni i numeri. Poiché lo spazio degli UUID possibili è enorme, due computer possono generare UUID in modo indipendente, nello stesso momento, e quasi mai ottenere lo stesso.

Formato e struttura di un UUID

I 128 bit di un UUID sono suddivisi in campi con nome. Ogni campo occupa un numero fisso di bit:

  • time_low - 32 bit
  • time_mid - 16 bit
  • time_hi_and_version - 16 bit
  • clock_seq_hi_and_reserved - 8 bit
  • clock_seq_low - 8 bit
  • node - 48 bit
Struttura dei campi di un UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Quattro bit all'interno di time_hi_and_version indicano il numero di versione dell'UUID, e due bit all'interno di clock_seq_hi_and_reserved indicano la variante, che dice al software come leggere gli altri campi.

Come generare un UUID con questo strumento

  1. Scegliere una versione: versione 1 (basata sul tempo) o versione 4 (casuale).
  2. Selezionare «Genera». Lo strumento crea subito un nuovo UUID di 128 bit.
  3. Selezionare «Copia» per copiare il risultato negli appunti.
  4. Incollare l'UUID in un codice, in un database o in un file di configurazione.

La versione 4 è adatta alla maggior parte degli usi, come le chiavi di database, perché non contiene informazioni su quando o dove è stata creata. La versione 1 registra il momento della creazione, il che può essere utile quando si vuole sapere quando è stato creato un record.

UUID versione 1 e versione 4 a confronto

La versione 1 codifica il timestamp corrente, più una sequenza di clock e un valore di nodo. Lo standard originale consentiva che il valore di nodo fosse l'indirizzo di rete (MAC) reale di un computer. Il nuovo standard afferma che gli indirizzi MAC comportano rischi per la privacy e non dovrebbero essere usati, e consente invece un valore di nodo casuale. Questo strumento usa sempre bit casuali per il nodo, quindi i suoi UUID di versione 1 non leggono né espongono mai un vero indirizzo MAC. Come richiede lo standard per un nodo casuale, lo strumento imposta a 1 il bit meno significativo del primo ottetto del nodo (il bit multicast), che indica che il nodo è casuale e non un vero indirizzo di rete. L'orologio dello strumento legge il tempo in millisecondi, quindi i passi più piccoli del timestamp sono sempre zero.

Gli UUID di versione 1 non si ordinano per momento di creazione se trattati come testo. La parte del timestamp che cambia più rapidamente, time_low, viene per prima, quindi un UUID successivo può essere ordinato prima di uno precedente. La RFC 9562 aggiunge la versione 6, una forma riordinata della versione 1 per un migliore ordinamento nei database, e afferma che i nuovi sistemi dovrebbero usare la versione 7 al posto delle versioni 1 e 6 ove possibile.

La versione 4 è costruita con bit casuali, con pochi bit fissi che indicano versione e variante. Non contiene alcun timestamp né dati specifici della macchina, quindi non rivela nulla su quando o dove è stata creata. Non è ordinabile per ordine di creazione.

Nello standard esistono altre versioni che questo strumento non genera. La versione 2 è riservata a DCE Security. Le versioni 3 e 5 si ottengono calcolando l'hash di uno spazio dei nomi e di un nome con MD5 o SHA-1, quindi lo stesso input produce sempre lo stesso UUID. Le versioni 6, 7 e 8 sono state aggiunte dalla RFC 9562.

Come calcolare un UUID (formula)

Versione 4:

  1. Generare 128 bit casuali. Lo strumento ottiene questi bit dalla Web Crypto API (crypto.getRandomValues), una fonte crittograficamente sicura; solo se tale API manca ricorre a Math.random.
  2. Impostare i quattro bit di versione, la prima cifra esadecimale del terzo gruppo, a 0100 (esadecimale 4).
  3. Impostare i due bit più significativi del quarto gruppo a 10 (così la prima cifra esadecimale di quel gruppo è 8, 9, a o b).

Solo 122 dei 128 bit sono casuali, perché 6 bit sono fissati dai passaggi 2 e 3. Ne risultano 2^122, ovvero circa 5,3 × 10^36, possibili UUID di versione 4.

Versione 1:

  1. Prendere l'ora corrente come conteggio di intervalli di 100 nanosecondi dal 15 ottobre 1582, la data della riforma del calendario gregoriano. Questo riempie time_low, time_mid e parte di time_hi_and_version.
  2. Generare una sequenza di clock casuale di 14 bit, usata per evitare duplicati se l'orologio di sistema viene portato indietro.
  3. Generare un valore di nodo casuale di 48 bit, poi impostare a 1 il bit multicast (il bit meno significativo del suo primo byte). La sequenza di clock e il nodo provengono dallo stesso prelievo Web Crypto della versione 4, con lo stesso ripiego su Math.random.
  4. Impostare i bit di versione a 0001 e i bit di variante a 10.

Considerando tutte le versioni di UUID, l'intero spazio a 128 bit contiene 2^128, ovvero circa 3,4 × 10^38, valori possibili.

Esempio svolto

Si consideri l'UUID di esempio visto in precedenza: 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 (binario 1010), inizia con 10, i bit di variante richiesti.
  • Le cifre esadecimali restanti sono il carico casuale.

Un programma che legge questo UUID controlla lo schema 4 e 10 per confermare il formato, poi tratta il resto come un valore opaco.

Usi comuni degli UUID

  • Chiavi primarie nei database, soprattutto quando più server creano record nello stesso momento senza coordinarsi tra loro.
  • Identificatori di file, eventi e risorse in sistemi distribuiti, come i microservizi.
  • ID di dispositivi in reti di grandi dimensioni, dove ogni dispositivo può generare il proprio ID offline.

Gli UUID non dovrebbero essere usati come password, segreti di sessione o chiavi API. Lo standard afferma che le implementazioni non devono usare gli UUID come capacità di sicurezza, cioè un ID che concede l'accesso per il solo fatto di essere conosciuto.

Il compromesso principale è la dimensione: un UUID occupa 16 byte di spazio, contro 4 o 8 byte di un semplice contatore intero. Gli UUID casuali, come la versione 4, hanno anche una scarsa località nell'indice del database: i nuovi valori finiscono in punti casuali dell'indice, il che può rallentare gli inserimenti.

Alternative agli UUID

Gli interi autoincrementali sono più piccoli e semplici, ma funzionano male quando più di un server deve assegnare ID in modo indipendente. Sono stati creati vari schemi di ID ordinati nel tempo per risolvere il problema dell'ordinamento, e la RFC 9562 li elenca come contesto, tra cui Snowflake di Twitter e ULID. Un ULID è di 128 bit, come un UUID, ed è ordinabile lessicograficamente, cioè si ordina per momento di creazione come testo. Per i nuovi sistemi, l'UUID di versione 7 offre lo stesso vantaggio all'interno dello standard UUID.

Storia dello standard UUID

Gli UUID furono usati per la prima volta nell'Apollo Network Computing System, poi nel Distributed Computing Environment della Open Software Foundation e quindi in Microsoft Windows. L'Internet Engineering Task Force pubblicò la RFC 4122 a luglio 2005 e la sostituì con la RFC 9562 a maggio 2024.

Domande frequenti

A cosa serve un generatore di UUID? Crea identificatori univoci per database, sistemi distribuiti e ID di dispositivi, in modo che due record non debbano mai condividere lo stesso identificatore.

Qual è la differenza tra UUID v1 e v4? La versione 1 codifica un timestamp. La versione 4 è casuale, a parte i bit di versione e di variante, e non contiene alcun timestamp. L'output di versione 1 di questo strumento usa un valore di nodo casuale anziché un vero indirizzo MAC, quindi non espone informazioni che identificano la macchina.

La versione 1 espone il mio indirizzo MAC? Non con questo strumento. Lo standard originale consentiva al campo nodo di un UUID di versione 1 di contenere un vero indirizzo MAC, ma questo generatore riempie sempre quel campo con bit casuali, con il bit multicast impostato per indicare che è casuale.

Gli UUID hanno unicità garantita? Nessuno schema di identificatori può garantire un'unicità assoluta, ma 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 ogni uso pratico, purché i numeri casuali siano buoni.

Si può usare un UUID come chiave primaria di un database? Sì. Gli UUID funzionano bene come chiavi primarie nei sistemi distribuiti, perché qualsiasi nodo può generarne uno senza consultare un server centrale. Il costo è di 16 byte di spazio per chiave e, per le versioni casuali, inserimenti più lenti su tabelle molto grandi.

Un UUID è la stessa cosa di un GUID? Sì. La RFC 9562 afferma che gli UUID sono noti anche come GUID (Globally Unique IDentifiers), il nome usato sulle piattaforme Microsoft.

Gli UUID di versione 1 o 4 si possono ordinare per momento di creazione? Non come testo. La versione 4 è casuale e la versione 1 pone per prima la parte del timestamp che cambia più rapidamente. Per ID che si ordinano per momento di creazione, usare l'UUID di versione 7 o un ULID.

Riferimenti

  1. Internet Engineering Task Force. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — rende obsoleta la RFC 4122 (maggio 2024); 122 bit casuali nella versione 4; versioni 6 e 7 e l'indicazione di preferire la versione 7; gli indirizzi MAC non dovrebbero essere usati; gli UUID non devono essere capacità di sicurezza; scarsa località dell'indice della versione 4; storia di Apollo NCS, OSF DCE e Microsoft; GUID come altro nome.
  2. Internet Engineering Task Force. RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122 — pubblicata a luglio 2005; il timestamp della versione 1 conta intervalli di 100 nanosecondi dal 15 ottobre 1582.
  3. ULID project. Universally Unique Lexicographically Sortable Identifier. Specifica ULID — compatibilità a 128 bit con gli UUID e ordinamento lessicografico.