Generatore di UUID

Genera UUID nel tuo browser: v4 casuali, v7 ordinati per il database o v5 deterministici. Fino a 1000 alla volta e nulla abbandona mai il tuo dispositivo.

Premi Genera per ottenere il risultato
Versione
Opzioni avanzate

Hai bisogno di un identificatore che non entri in conflitto con uno creato da qualcun altro, su una macchina di cui non hai mai sentito parlare, senza dover chiedere il permesso a nessuno? Questo è esattamente il compito di un UUID. Si tratta di un numero a 128 bit, scritto come 36 caratteri nel familiare schema 8-4-4-4-12, e la sua intera concezione fa in modo che non ne esistano mai due uguali, anche se non c'è nulla che coordini chi ottiene cosa. Questo generatore gratuito li crea direttamente nel tuo browser: scegli una versione in Versione, indica quanti te ne servono in Quantità e premi Genera. La pagina si apre su un singolo v4, la versione che la maggior parte dei progetti cerca, per cui il tuo primo identificatore è a portata di clic.

Ogni identificatore viene generato dal tuo browser tramite la Web Crypto API. La versione 4 utilizza crypto.randomUUID() se il browser lo fornisce e crypto.getRandomValues() in caso contrario — una fonte di casualità crittograficamente forte anziché una funzione pseudo-casuale JavaScript come Math.random(). La versione 7 inserisce all'inizio un timestamp a 48 bit con precisione al millisecondo, seguito da un contatore a 12 bit che avanza all'interno dello stesso millisecondo e da 62 bit casuali, che è il metodo di ordinamento descritto nell'RFC 9562; quel contatore è il motivo per cui un lotto di mille identificatori esce in ordine anziché mescolato. La versione 1 combina un timestamp con un identificatore di nodo casuale che ha il bit di multicast impostato, quindi non trasporta mai l'indirizzo della tua scheda di rete come facevano le implementazioni originali degli anni '90. Le versioni 3 e 5 non sono affatto casuali: calcolano l'hash di un namespace insieme a un nome, utilizzando rispettivamente MD5 e SHA-1, e anche questo calcolo dell'hash avviene sul tuo dispositivo. Nessun dato viene inviato a un server, nulla viene registrato e, una volta caricata la pagina, continua a funzionare anche senza connessione.

Versione è il campo che decide tutto il resto. La versione 4 è formata da 122 bit casuali senza alcuna struttura: è l'opzione predefinita e la risposta corretta quando un identificatore deve solo essere unico. La versione 7 mantiene 62 bit casuali ma inizia con il momento in cui è stata creata, in modo che un set di questi si ordini in base a quando è stato generato; questo la rende la versione da scegliere quando l'identificatore diventerà una chiave di database. La versione 1 è lo schema originale basato sul tempo, mantenuto qui per i sistemi che lo richiedono ancora. Le versioni 3 e 5 sono la coppia insolita: sono deterministiche, il che significa che gli stessi input producono sempre lo stesso identificatore, e richiedono due campi aggiuntivi — Namespace, che è uno degli spazi standard DNS, URL, OID e X.500 o uno Personalizzato creato da te, e Nome, la stringa che si sta identificando. Fornisci alla v5 il namespace URL e https://example.com/a e otterrai lo stesso UUID oggi, domani e sulla macchina di chiunque altro. Per questo motivo, Quantità scompare quando viene selezionata la v3 o la v5: mille copie di un valore deterministico sarebbero solo mille copie di un valore deterministico. Per ogni altra versione, Quantità va da 1 a 1000.

Quattro interruttori cambiano la forma del risultato senza alterare i 128 bit sottostanti. Maiuscole stampa le cifre esadecimali in caratteri capitali, Senza trattini fornisce la forma compatta a 32 caratteri preferita da alcune colonne e nomi di file, e Parentesi graffe racchiude il valore tra { } — la forma che Windows e il mondo .NET chiamano GUID. Sotto Opzioni avanzate, urn:uuid: aggiunge il prefisso che lo rende un URN formale; disattiva Parentesi graffe e Senza trattini quando è attivo, perché lo standard ammette esattamente una forma URN ed è quella canonica con i trattini. Formato di copia decide come viene unito un lotto quando lo copi: uno per riga, separati da virgole, oppure ogni valore tra virgolette seguito da una virgola, che si incolla direttamente in un array nel codice. Sotto il risultato si trova una riga che riporta la casualità in bit — 122 per la v4, 62 per la v7 — e, per la v7, il timestamp codificato nel primo identificatore del lotto, in modo che il tempo all'interno del valore sia visibile anziché implicito. Sia Copia tutto che Salva su file rispettano Formato di copia. Cronologia conserva gli ultimi 10 lotti nel tuo browser: fai clic su uno per recuperarlo, copia o elimina una singola voce, o cancella tutto. Cancella svuota il risultato e lascia intatte le tue impostazioni, e superati i 50 identificatori la lista diventa un unico blocco scorrevole invece di cinquanta righe.

La cosa più consequenziale su questa pagina è la differenza tra v4 e v7 come chiave primaria, e non è una questione di gusti. Gli indici dei database sono alberi mantenuti in ordine, e il punto in cui atterra una nuova chiave in quell'ordine decide quanto lavoro costa l'inserimento. Una chiave v4 è casuale, quindi inserimenti consecutivi finiscono in angoli non correlati dell'indice: le pagine che erano piene si dividono, le parti dell'albero che il database sta mantenendo in memoria sono raramente le parti di cui ha bisogno l'inserimento successivo, e l'indice finisce per essere più grande e più frammentato di quanto le righe a cui punta non giustifichino. Una chiave v7 inizia con il millisecondo corrente, per cui inserimenti consecutivi finiscono l'uno accanto all'altro sul bordo destro dell'albero, che è il modello prodotto da un intero autoincrementale e il modello attorno a cui sono state costruite le strutture degli indici. È tutto qui il compromesso: la v7 ti offre il comportamento di inserimento di una chiave sequenziale pur mantenendo la proprietà che ti ha fatto scegliere gli UUID in primo luogo, ovvero che chiunque può crearne uno senza chiederlo a un server. Ciò che costa è che l'ora di creazione è ora leggibile all'interno dell'identificatore, e se questo sia importante o meno è una questione che riguarda i tuoi dati, non il formato.

Nessun sistema controlla mai l'unicità di un UUID; la sua dimensione è la garanzia. Non c'è alcun registro, nessun viaggio di andata e ritorno verso un server, nessuna ricerca — un generatore produce un numero e te lo consegna, e il motivo per cui due di essi non entrano in collisione è semplicemente che ci sono 2^122 possibili valori v4, circa 5,3 sestilioni. Il paradosso del compleanno è il modo onesto di quantificare questo aspetto: avresti bisogno di circa 2,7 trilioni di identificatori prima che vi sia una probabilità su due che due di essi corrispondano, il che equivale a un miliardo di nuovi UUID ogni secondo per 86 anni. Vale la pena essere precisi su ciò che questo promette e ciò che non promette. È una garanzia statistica, non aritmetica, ed è valida solo finché la casualità sottostante è reale — un generatore inizializzato male, o una macchina virtuale clonata insieme al suo pool di entropia, la infrangono in un modo che il formato non può rilevare. La versione 7 restringe ulteriormente la questione: all'interno di un singolo millisecondo un generatore non può ripetersi affatto, perché il contatore si incrementa invece di lanciare i dadi, e attraverso generatori indipendenti, sono i 62 bit casuali a fare il lavoro.

Un UUID è un identificatore, non una password. La versione 4 è imprevedibile e questo spinge le persone a trattarla come un segreto — un link per il ripristino della password, un URL impossibile da indovinare, un token di sessione, una chiave API. L'imprevedibilità è reale, ma la segretezza è una proprietà di come viene gestito un valore, e gli identificatori vengono gestiti con noncuranza per concezione: finiscono negli URL, che si depositano nella cronologia dei browser, nei log dei server, nelle intestazioni referer e nelle analisi, e vengono incollati nei messaggi di chat. Le altre versioni sono candidate ancora peggiori. Sia la versione 1 che la versione 7 codificano il momento in cui sono state create, quindi chiunque ne possegga una sa approssimativamente quando è stata realizzata e può restringere l'intorno di tutto ciò che è stato creato nello stesso istante. Le versioni 3 e 5 sono volutamente deterministiche: un UUID v5 di un indirizzo email non è un segreto sottoposto a hash, è un valore che chiunque abbia lo stesso indirizzo può calcolare in un secondo. Usa un UUID per dare un nome a una cosa. Usa un generatore di password, o un token proveniente da una libreria costruita per i segreti, quando il valore deve rimanere sconosciuto.

Perché scegliere questo generatore di UUID?

Gli UUID si presentano ovunque qualcosa debba essere nominato prima che qualsiasi cosa possa confermare che il nome è libero. Il codice dell'applicazione li forgia per le righe che sta per inserire, in modo che l'oggetto abbia un'identità prima ancora di aver raggiunto il database e che un client possa farvi riferimento mentre la scrittura è ancora in volo. I sistemi distribuiti si affidano maggiormente a essi: diversi servizi che scrivono su un'unica tabella, un client mobile offline che crea record in aereo, una coda che deve riconoscere il messaggio che ha già elaborato — nessuno di questi può aspettare il proprio turno per un contatore condiviso. La versione 5 copre un'esigenza diversa, ovvero un identificatore stabile derivato da qualcosa che hai già: lo stesso documento, lo stesso URL o lo stesso account sono sempre mappati sullo stesso UUID, quindi un'importazione può essere eseguita due volte senza duplicare nulla. Altrove sono semplicemente il formato richiesto da un sistema — un identificatore di correlazione inserito in log e tracce, un nome di file che non andrà in collisione quando i caricamenti di mille utenti arriveranno in un solo bucket, una chiave di registro di Windows, un set di dati di test che deve sembrare composto da dati reali.

Vale la pena conoscere alcuni limiti onesti. Un lotto è una singola versione: il valore in Versione si applica a tutto ciò che vi è contenuto, quindi una serie di v4 e una serie di v7 costituiscono due lotti. Questo è un generatore, non un ispettore — incollare un UUID per rileggere la sua versione o il suo timestamp non è qualcosa che questa pagina fa. Salva su file scrive un file di testo semplice anziché CSV o JSON. La versione 7 rivela apertamente quando è stata creata, al millisecondo, il che è un vero e proprio compromesso piuttosto che un difetto, e la versione 1 fa trapelare il tempo nello stesso modo; se questo è un problema per i tuoi dati, la versione 4 è la versione che non dice niente a nessuno. Due valori speciali dello standard non sono versioni e quindi non sono opzioni in Versione, ma puoi copiarli da qui: l'UUID nil, 00000000-0000-0000-0000-000000000000, e l'UUID max, ffffffff-ffff-ffff-ffff-ffffffffffff. Tutto in questa pagina segue l'RFC 9562, la specifica che ha sostituito l'RFC 4122 nel 2024, per cui l'output è accettato da qualsiasi libreria, database o API che gestisca gli UUID. All'interno di questi limiti la garanzia è forte: ogni identificatore è costruito secondo lo standard, partendo da una casualità crittograficamente sicura, sulla tua stessa macchina, e nessun altro lo vedrà mai.

FAQ

Come genero un UUID?

Scegli una versione in Versione, imposta quanti te ne servono in Quantità e premi Genera. La pagina si apre su un singolo identificatore di versione 4, che è quello che la maggior parte dei progetti desidera, per cui un UUID ordinario è a portata di clic. Ogni valore appare con il proprio pulsante di copia e Copia tutto prende l'intero lotto in una sola volta.

Qual è la differenza tra l'UUID v4 e il v7?

La versione 4 è costituita da 122 bit casuali senza alcuna struttura, per cui due di essi non hanno alcuna relazione tra loro. La versione 7 impiega i primi 48 bit per il millisecondo in cui è stata creata, aggiunge un contatore e 62 bit casuali, ed è quindi ordinabile: un lotto esce nell'ordine in cui è stato generato. Usa la v4 quando un identificatore deve solo essere unico, e la v7 quando diventerà anche una chiave di database.

Quale versione di UUID dovrei utilizzare?

La versione 4 a meno che tu non abbia un motivo per sceglierne un'altra. Scegli la versione 7 se l'identificatore diventa una chiave primaria e le prestazioni di inserimento sono importanti, la versione 5 se hai bisogno che lo stesso input produca sempre lo stesso identificatore, e la versione 1 solo se un sistema con cui devi comunicare lo richiede specificamente. La versione 3 è uguale alla versione 5 con l'MD5 invece dell'SHA-1 ed esiste per motivi di compatibilità.

Gli UUID generati sono davvero casuali e sicuri?

La casualità è sicura dal punto di vista crittografico: proviene dalla Web Crypto API del tuo browser, tramite crypto.randomUUID() o crypto.getRandomValues(), e non da Math.random(). La sicurezza nel senso di imprevedibilità è una questione diversa dalla sicurezza nel senso di segretezza — un UUID è un identificatore e non dovrebbe essere usato come password, token di sessione o chiave API.

Posso generare molti UUID contemporaneamente?

Sì, fino a 1000 in una volta sola. Imposta Quantità e premi Genera; superati i cinquanta valori il risultato diventa un unico blocco scorrevole anziché una lunga lista di righe. Copia tutto e Salva su file prendono l'intero lotto, unito nel modo indicato da Formato di copia — uno per riga, separati da virgole, o tra virgolette per poterlo incollare direttamente in un array.

Perché la v3 e la v5 mi danno lo stesso UUID ogni volta?

Perché è a questo che servono. Le versioni 3 e 5 sono deterministiche: calcolano l'hash del namespace e del nome che fornisci loro, per cui input identici producono sempre un identificatore identico, su qualsiasi macchina e in qualsiasi linguaggio. Questo le rende utili per derivare un identificatore stabile da qualcosa che possiedi già, ed è anche il motivo per cui Quantità è nascosta quando le selezioni.

Cosa sono Namespace e Nome, e quale namespace dovrei scegliere?

Sono i due input da cui viene calcolato un UUID di versione 3 o versione 5. Namespace indica di che tipo di cosa è il nome — DNS per i nomi host, URL per gli indirizzi, OID e X.500 per quegli schemi di directory, oppure Personalizzato se vuoi fornire tu stesso un UUID di namespace, che è la scelta abituale all'interno di un'applicazione. Nome è la stringa vera e propria. Namespace diversi danno risultati completamente diversi per lo stesso nome, che è il motivo per cui esistono.

Perché l'UUID v7 è migliore del v4 per la chiave primaria di un database?

Per via del punto in cui atterrano i valori nell'indice. Un indice è mantenuto in ordine, e una chiave v4 casuale atterra ovunque al suo interno, per cui gli inserimenti dividono le pagine in tutto l'albero e le parti trattenute in memoria sono raramente le parti che servono subito dopo. Una chiave v7 inizia col millisecondo attuale, cosicché inserimenti consecutivi atterrano vicini tra loro alla fine dell'indice, che è il modo in cui si comporta una chiave intera sequenziale — pur permettendo a qualsiasi servizio di generare un identificatore senza dover interpellare un contatore centrale.

Due UUID potrebbero mai essere uguali?

In linea di principio sì, in pratica no, e vale la pena sapere quale dei due sia il tuo caso. Nulla verifica l'unicità: ci sono semplicemente 2^122 possibili valori della versione 4, circa 5,3 sestilioni, e ti servirebbero all'incirca 2,7 trilioni di essi — un miliardo al secondo per 86 anni — prima di avere una sola probabilità su due che si verifichi una collisione. La garanzia è statistica, non assoluta, e dipende dall'effettiva genuinità della casualità, che è il motivo per cui questo generatore utilizza la Web Crypto API anziché una normale funzione pseudo-casuale.

Posso usare un UUID come password, chiave API o token di sessione?

No, ed è l'errore che costa più caro. Un UUID di versione 4 è imprevedibile, ma gli identificatori vengono gestiti come se fossero pubblici: finiscono negli URL, nella cronologia dei browser, nei log dei server, nelle intestazioni referer e nelle analisi. Le versioni 1 e 7 rivelano inoltre quando sono state create, e chiunque conosca gli input delle versioni 3 e 5 può ricalcolarle. Per tutto ciò che deve rimanere segreto, usa un generatore di password o un token di una libreria pensata per i segreti.

Un UUID v7 rivela quando è stato creato?

Sì, con precisione al millisecondo, e questo è dovuto al suo design e non a una disattenzione — il timestamp è ciò che rende la v7 ordinabile. La riga sotto il risultato ti mostra l'ora codificata nel primo valore del lotto, in modo che tu possa vedere esattamente cosa viene esposto. Anche la versione 1 contiene un timestamp. Se l'ora di creazione è un dato che preferiresti non pubblicare, la versione 4 è quella che non dice niente a nessuno.

L'UUID v1 espone il mio indirizzo MAC?

Non qui. Lo schema originale usava l'indirizzo della scheda di rete della macchina come campo del nodo, che è da dove deriva la reputazione della v1, ma lo standard permette anche un identificatore di nodo casuale in cui il bit di multicast è impostato, e questo è ciò che produce questo generatore. Il tuo indirizzo hardware non viene mai letto e non apparirà mai nell'output.

A cosa servono Maiuscole, Senza trattini, Parentesi graffe e urn:uuid:?

Soltanto alla presentazione — i 128 bit sottostanti sono identici in tutte le forme. Maiuscole stampa le cifre esadecimali in caratteri capitali, Senza trattini fornisce la versione compatta a 32 caratteri, Parentesi graffe racchiude il valore tra { } nello stesso modo in cui Windows e .NET scrivono i GUID, e urn:uuid: aggiunge il prefisso che lo rende un URN formale. Quando si attiva urn:uuid: si spengono le altre due opzioni perché lo standard definisce un solo formato URN ed è quello canonico con i trattini.