Generatore ULID

Generi ULID online: identificativi a 26 caratteri in formato Crockford Base32 con marcatura temporale a 48 bit e 80 bit casuali.

Formato
ID generati
Pronto. Generi ULID direttamente nel Suo browser.

Come viene generato questo ID

Struttura
26 caratteri Crockford Base32: 10 caratteri temporali seguiti da 16 caratteri casuali.
Entropia
80 bit casuali successivi ai 48 bit della marcatura temporale in millisecondi.
Data/Ora
Sì. I primi 10 caratteri codificano il tempo in millisecondi, consentendo un ordinamento lessicale basato sul tempo.
Rischio di collisione
La parte finale casuale dispone di 80 bit; il rischio dipende principalmente dal numero di ID generati all'interno dello stesso millisecondo.
Esempio
01M12BRPXTCERA9FCWDSWCAB9X

I Suoi ID vengono generati localmente tramite funzioni di generazione casuale sicure del browser. Nessun dato viene inviato a BroBroGo.

Domande frequenti

A cosa serve un ULID?

L'ULID è compatto, adatto agli URL e ordinabile temporalmente come testo normale, il che lo rende ideale per log, chiavi di oggetti e record che richiedono un ordinamento in base alla data di creazione.

L'ULID è uguale all'UUID v7?

No. Sebbene entrambi includano il tempo in millisecondi, l'ULID utilizza la codifica Crockford Base32 a 26 caratteri, mentre l'UUID v7 mantiene la classica struttura esadecimale degli UUID.

Cos'è un ULID e perché usarlo

Un ULID (Universally Unique Lexicographically Sortable Identifier) è un formato di identificatore a 128 bit rappresentato da 26 caratteri. A differenza dei classici UUID, gli ULID sono pensati per essere compatti, ordinabili temporalmente e sicuri per gli URL. La pagina ulid-generator di questo tool online permette di generare da 1 a 100 ULID in un colpo solo, sfruttando esclusivamente la casualità del browser (crypto.getRandomValues()), senza inviare alcun dato a un server.

Ciò che distingue questa pagina dagli altri generatori dello stesso sito (UUID, NanoID, etc.) è la scelta di utilizzare l’alfabeto Crockford base32 (0‑9, A‑Z eccetto I, L, O, U). Questo alfabeto rende gli ULID case‑insensitive — non importa se scrivi in maiuscolo o minuscolo — e li priva di trattini, a differenza dei UUID che ne contengono quattro. Inoltre, i primi dieci caratteri codificano un timestamp in millisecondi (48 bit), il che rende gli ULID lessicograficamente ordinabili per istante di creazione: un ULID generato dopo un altro avrà una stringa alfanumerica più grande, purché siano passati almeno un millisecondo di differenza.

Come funziona la pagina: input e output

L’interfaccia è volutamente essenziale. Hai un selettore di formato (fissato su ULID, quindi nessuna opzione per aggiungere trattini o maiuscole — non servono), un campo numerico per il conteggio (da 1 a 100) e un pulsante di generazione. Una volta premuto, la pagina produce immediatamente la lista degli ULID richiesti, accompagnata da un messaggio di stato: “Pronto.” prima della generazione, “Generato.” dopo, e “Copiati tutti!” quando l’intero elenco viene copiato negli appunti.

Ogni singolo ULID può essere copiato cliccandoci sopra individualmente. La generazione avviene ogni volta che modifichi una qualsiasi opzione (conteggio o formato): non esiste una memorizzazione dello stato precedente. Il numero di ULID generati è sempre indicato in un contatore a fondo pagina.

La struttura interna di un ULID: timestamp e casualità

Un ULID è composto da 128 bit suddivisi esattamente in due parti:

  • Timestamp (48 bit, primi 10 caratteri): rappresenta il numero di millisecondi trascorsi dall’epoca Unix (1970‑01‑01T00:00:00Z). Viene codificato in Crockford base32, producendo dieci caratteri. Grazie a questo prefisso, gli ULID sono monotonicamente crescenti nel tempo, a patto che ogni ID venga generato in un millisecondo diverso. Se due ULID nascono nello stesso millisecondo, l’ordinamento lessicografico non è garantito: il secondo componente casuale può invertire l’ordine.
  • Componente casuale (80 bit, ultimi 16 caratteri): generato tramite un generatore di numeri pseudo-casuali crittograficamente sicuro (CSPRNG). I 16 caratteri codificano 80 bit di pura casualità, fornendo uno spazio di (2^‹80›) valori possibili per ogni millisecondo.

I 26 caratteri totali sono una stringa senza trattini, maiuscole o minuscole indifferenti (il tool normalmente li restituisce in maiuscolo, ma puoi convertirli senza problemi). L’assenza di caratteri ambigui (I/L/O/U) evita errori di lettura manuale.

Vantaggi rispetto a UUID e altri formati

Caratteristica UUID v4 (36 caratteri) ULID (26 caratteri)
Lunghezza 36 (con 4 trattini) 26 (senza trattini)
Ordinabile temporalmente No (completamente casuale) Sì (timestamp iniziale)
Case‑insensitive No Sì (alfabeto Crockford)
Sicuro per URL Sì (con escaping) Sì (nessun carattere speciale)
Bit totali 128 128

Rispetto a UUID v7 (bozza RFC 9562), che pure include un timestamp, ULID è più compatto e non richiede configurazioni di varianti o versioni. Mentre UUID v7 usa un formato a 36 caratteri con trattini, ULID rinuncia ai trattini e riduce la lunghezza del 28%. Per applicazioni dove lo spazio di archiviazione o la leggibilità in URL sono critici, ULID risulta vincente.

L’ordinamento temporale ha un impatto diretto sulle prestazioni dei database relazionali: inserire righe con chiavi primarie ordinate (come gli ULID) evita la frammentazione degli indici B‑tree causata dalle chiavi casuali dei UUID v4. Questo porta a scritture più veloci e a un minore overhead di manutenzione dell’indice.

Probabilità di collisione e generazione locale

Poiché i 16 caratteri casuali offrono 80 bit di entropia, la probabilità di generare due ULID identici è estremamente bassa. Per avere una collisione del 50%, dovresti generare circa (2^‹40›) ULID in un singolo millisecondo — un numero irrealistico per un generatore lato client. In pratica, la generazione locale nel browser è sicura: ogni ULID viene creato con window.crypto.getRandomValues(), lo stesso motore usato per chiavi crittografiche. Nessun dato esce dal tuo dispositivo.

Una nota importante: se generi molti ULID (es. 100) in un colpo solo, il timestamp di tutti sarà identico (perché la generazione avviene in meno di un millisecondo). In questo caso, l’ordinamento lessicografico tra quei 100 ID sarà basato solo sulla componente casuale, quindi non rifletterà un ordine di creazione reale. Se hai bisogno di ordinare ULID generati in rapida successione, considera di introdurre un piccolo ritardo programmatico o di usare un identificatore monotono come Snowflake.

Casi d’uso e chi dovrebbe usarlo

  • Sviluppatori web e mobile che vogliono identificatori brevi, sicuri per URL e ordinabili senza dover aggiungere una colonna timestamp separata.
  • Amministratori di database che progettano chiavi primarie per tabelle con alto carico di scrittura: gli ULID si inseriscono in modo sequenziale negli indici, migliorando le prestazioni rispetto a UUID casuali.
  • Architetti di sistemi distribuiti che necessitano di identificatori unici su più nodi senza coordinazione centralizzata: la parte random garantisce unicità anche se due nodi generano ULID nello stesso millisecondo, purché i generatori siano indipendenti.
  • Progettisti di API che espongono ID pubblici: la mancanza di trattini e la case‑insensitivity riducono gli errori di digitazione e rendono gli ID facili da usare in query URL, form HTML e messaggi di testo.

FAQ

1. Posso generare più di 100 ULID alla volta?
No, il tool accetta solo un conteggio compreso tra 1 e 100. Per generare più ID, ripeti la generazione più volte o esegui uno script locale.

2. Gli ULID sono veramente ordinabili per tempo?
Sì, fino alla risoluzione di un millisecondo. Due ULID generati in millisecondi diversi avranno una stringa lessicograficamente ordinata: quello con timestamp più grande viene dopo. Se generati nello stesso millisecondo, l’ordine è determinato dalla parte casuale (non garantito).

3. Qual è la differenza tra ULID e UUID v7?
Entrambi includono un timestamp. UUID v7 ha 36 caratteri (con trattini) e segue uno standard IETF più recente; ULID è più compatto (26 caratteri) e usa Crockford base32, che evita caratteri ambigui. La scelta dipende dall’ecosistema: se già usi UUID, v7 potrebbe essere più facile da adottare; se vuoi massima compattezza e leggibilità, ULID è superiore.

4. È sicuro usare ULID come chiave primaria?
Sì, ma tieni presente che il timestamp è deducibile dai primi 10 caratteri. Se la riservatezza temporale è un requisito (ad esempio non vuoi che si possa sapere quando è stato creato un record), un ULID non va bene. Per la maggior parte degli usi interni, la monotonicità è un vantaggio.

5. Come copio un singolo ULID?
Basta cliccare sul testo dell’identificatore nella lista. Il tool lo copia automaticamente negli appunti. Se invece clicchi sul pulsante “Copia tutto”, vengono copiati tutti gli ULID separati da a capo.

6. Perché non ci sono opzioni per maiuscole/minuscole o trattini?
Perché l’alfabeto Crockford base32 è per definizione case‑insensitive: non importa la capitalizzazione. I trattini non esistono nello standard ULID: a differenza dei UUID, non ci sono gruppi da separare. Aggiungere queste opzioni sarebbe stato fuorviante.