Generatore ULID

Genera identificatori lessicograficamente ordinabili con timestamp e casualità

Prova questi esempi:

Cos'è ULID?

ULID (Identificatore Universalmente Unico e Lessicograficamente Ordinabile) è un formato identificatore a 128 bit progettato per superare le limitazioni degli UUID. Consiste in:

  • Timestamp: 48 bit di tempo Unix con precisione al millisecondo
  • Randomness: 80 bit di dati casuali crittograficamente sicuri
  • Encoding: rappresentazione Base32 (26 caratteri)

Esempio di formato: 01ARZ3NDEKTSV4RRFFQ69G5FAV

Come funziona ULID

  1. Genera 48 bit per il timestamp (tempo Unix in millisecondi)
  2. Genera 80 bit di dati casuali crittograficamente sicuri
  3. Combina il timestamp (più significativo) con la casualità (meno significativa)
  4. Codifica l'intero valore a 128 bit usando l'alfabeto Base32 di Crockford
  5. Il risultato è una stringa di 26 caratteri (i primi 10 caratteri sono il timestamp, gli ultimi 16 la casualità)

Vantaggi e considerazioni

AdvantagesConsiderations
  • Ordinabile lessicograficamente
  • Set di caratteri sicuro per URL
  • Nessuna codifica speciale necessaria
  • Case-insensitive
  • Nessuna preoccupazione per la privacy
  • Più recente, meno diffuso
  • Supporto limitato nelle librerie
  • Nessuna compatibilità con UUID
  • Non può andare indietro prima del 1970

Struttura ULID

ComponentBitsCharactersDescription
Timestamp48 bit10 caratteriTimestamp Unix (ms) codificato in Base32
Randomness80 bit16 caratteriByte casuali codificati in Base32

Confronto ULID vs. UUID

FeatureULIDUUID v1UUID v4UUID v7
Size128 bit128 bit128 bit128 bit
Lunghezza stringa26 caratteri36 caratteri36 caratteri36 caratteri
Time-based
Ordinamento naturale
Sicuro per URL
Esposizione dell'indirizzo MAC
Componente casuale
Standard canonico⚠️ Bozza

Casi d'uso comuni

  • Chiavi primarie di database: Indici ottimizzati per le prestazioni
  • Sistemi distribuiti: Generazione senza coordinamento
  • APIs: Identificatori puliti e sicuri per URL
  • Dati di serie temporali: Ordinamento cronologico nativo
  • Sistemi di log: Identificatori di eventi ordinabili
  • Applicazioni moderne: Dove le limitazioni degli UUID sono problematiche

Perché scegliere ULID?

  • Sortability: Ordina lessicograficamente per tempo di creazione
  • Sicurezza per URL: Nessuna codifica URL necessaria (a differenza degli UUID con trattini)
  • Compactness: 26 caratteri contro 36 per UUID
  • Insensibilità al maiuscolo/minuscolo: Riduce gli errori di input dell'utente
  • Monotonicity: Ordinamento monotono opzionale all'interno dello stesso millisecondo
  • Nessun carattere speciale: Formato semplice, solo alfanumerico

Domande frequenti

Come si confronta ULID con UUID v7?

Entrambi utilizzano timestamp Unix per la possibilità di ordinamento e hanno componenti casuali. Le principali differenze sono la codifica (Base32 vs esadecimale), il formato (26 caratteri vs 36) e la standardizzazione (UUID v7 è in bozza di specifica RFC).

Posso estrarre il tempo di creazione da un ULID?

Sì. I primi 10 caratteri rappresentano un timestamp Unix con precisione al millisecondo che può essere decodificato e convertito in una data/ora standard.

Gli ULID sono compatibili con i campi UUID dei database?

No. Gli ULID usano un formato diverso e devono essere memorizzati come stringhe o dati binari piuttosto che nei tipi nativi UUID dei database.

Cos'è la monotonicità negli ULID?

Alcune implementazioni ULID offrono un'opzione monotona che garantisce un ordine di ordinamento sequenziale anche all'interno dello stesso millisecondo incrementando la componente casuale per gli ULID creati nello stesso timestamp.

Quale set di caratteri usa ULID?

ULID usa la codifica Base32 di Crockford (0-9, A-Z escludendo I, L, O, U) progettata per minimizzare confusione ed errori di trascrizione quando gli ID sono letti o inseriti manualmente.

Resources

Alfabeto Base32 di Crockford

Valore di codificaCharacterNotes
0-90-9Cifre decimali
10-31A-ZEscludendo I, L, O, U per leggibilità

Caratteri: 0123456789ABCDEFGHJKMNPQRSTVWXYZ

Questa codifica è insensibile al maiuscolo/minuscolo per la decodifica (ma gli ULID sono tipicamente generati in maiuscolo).