Utilia

Generatore di ULID e Nano ID

Genera ULID (anche monotoni) o Nano ID con alfabeto e lunghezza a scelta, in blocco, decodifica il timestamp di un ULID e valuta il rischio di collisione.

Tipo di ID

Decodifica un ULID

Come generare ULID o Nano ID

  1. In Tipo di ID, scegli ULID (ordinabile) o Nano ID (corto).
  2. Imposta Quanti (da 1 a 1.000). Dieci ID vengono generati appena la pagina si carica.
  3. Per gli ULID, lascia spuntato Monotono (strettamente crescente) così che gli ID creati nello stesso millisecondo restino comunque in ordine, e spunta Minuscolo se il tuo sistema lo preferisce.
  4. Per i Nano ID, scegli un Alfabeto (oppure Personalizzato… e scrivi i tuoi caratteri) e una Lunghezza.
  5. Premi Genera, poi Copia l’elenco o scaricalo come file .txt (un ID per riga).

Per leggere la data nascosta in un ULID, incollalo in Decodifica un ULID o premi Decodifica il primo ID. Lo strumento mostra il timestamp in UTC (ISO 8601), nella tua ora locale, in millisecondi Unix, e la parte casuale di 80 bit in esadecimale.

Che cos’è un ULID?

Un ULID (Universally Unique Lexicographically Sortable Identifier) è un identificativo di 128 bit scritto come 26 caratteri in Base32 di Crockford, per esempio 01ARZ3NDEKTSV4RRFFQ69G5FAV. I primi 10 caratteri codificano un timestamp di 48 bit in millisecondi (sufficiente fino all’anno 10889); gli ultimi 16 caratteri sono 80 bit casuali. Il Base32 di Crockford esclude I, L, O e U per evitare confusioni, e la decodifica non distingue maiuscole e minuscole.

Siccome il tempo viene per primo, gli ULID si ordinano alfabeticamente nell’ordine di creazione. Questo li rende ottime chiavi primarie: le nuove righe finiscono in fondo a un indice B-tree invece di sparpagliarsi come con gli UUID casuali, e puoi ordinare per ID invece che per una colonna data separata.

Modalità monotona. All’interno di un millisecondo, ULID casuali si ordinerebbero in modo casuale. Con l’opzione monotona, lo strumento segue la specifica ULID: quando più ID vengono creati nello stesso millisecondo, mantiene il timestamp e aggiunge 1 alla parte casuale precedente. Se l’orologio torna indietro, mantiene l’ultimo timestamp, così la sequenza non decresce mai.

Tieni presente che un ULID rivela quando è stato creato. Non usarlo dove questa informazione è sensibile.

Che cos’è un Nano ID?

Nano ID è un identificativo casuale compatto. Il formato predefinito è di 21 caratteri tratti da un alfabeto sicuro per URL di 64 caratteri (A–Z a–z 0–9 _ -), che dà 126 bit casuali, simile a un UUID v4 (122 bit) ma con meno caratteri. Puoi scegliere esadecimale, solo cifre, minuscole e cifre, alfanumerico, un insieme senza caratteri ambigui (niente 0/O, 1/l/I, 5/S…) per codici che le persone devono digitare, oppure un tuo alfabeto da 2 a 256 caratteri. I caratteri duplicati in un alfabeto personalizzato vengono rimossi, perché renderebbero alcuni caratteri più probabili.

Ogni carattere viene estratto con crypto.getRandomValues usando il campionamento con rifiuto, quindi non c’è alcun bias da modulo.

Probabilità di collisione

Il pannello Probabilità di collisione applica il limite del paradosso del compleanno. Con un alfabeto di dimensione A e una lunghezza L esistono N = A^L ID possibili. Dopo k ID, la probabilità di almeno un duplicato è circa 1 − e^(−k²/2N), quindi un rischio dell‘1% si raggiunge dopo k ≈ √(2N · ln(1/0,99)) ID. Inserisci gli ID generati all’ora per vedere quanto tempo ci vorrebbe. Con le impostazioni predefinite e 1.000 ID all’ora, per un rischio dell‘1% servono circa 149 miliardi di anni; con 8 caratteri esadecimali bastano circa 9.300 ID.

Domande frequenti

Meglio ULID o UUID?

Sono entrambi a 128 bit. Un ULID è più corto da scrivere (26 caratteri invece di 36) e si ordina per tempo. Lo UUID versione 7 offre ora lo stesso ordinamento temporale nel formato UUID standard, che i database spesso memorizzano in modo nativo. Scegli UUID v7 se il tuo stack lo supporta, ULID se vuoi una stringa compatta e leggibile.

ULID e Nano ID sono abbastanza sicuri per i token?

I Nano ID con alfabeto e lunghezza predefiniti hanno 126 bit casuali provenienti da un generatore crittografico, sufficienti per link impossibili da indovinare. Gli ULID hanno solo 80 bit casuali, e in modalità monotona ID consecutivi differiscono di uno, quindi non usare gli ULID come segreti.

Posso accorciare un Nano ID?

Sì, ma il rischio di collisione cresce molto in fretta. Controlla il valore ID per l‘1% di probabilità di un duplicato per la tua lunghezza e il tuo alfabeto prima di affidarti a un ID corto.

Perché il decodificatore rifiuta il mio ULID?

Un ULID deve avere esattamente 26 caratteri, usare solo caratteri del Base32 di Crockford e iniziare con un carattere da 0 a 7 (un primo carattere più alto supererebbe i 128 bit).

Gli ID vengono salvati o inviati da qualche parte?

No. Vengono generati nel tuo browser e scompaiono quando lasci la pagina.