ULID Generator

Genereer lexicografisch sorteervriendelijke identifiers met timestamp en willekeurigheid

Probeer deze voorbeelden:

Wat is ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) is een 128-bits identificatieformaat ontworpen om beperkingen van UUID's te overwinnen. Het bestaat uit:

  • Timestamp: 48 bits millisecondeprecisie Unix-tijd
  • Randomness: 80 bits cryptografisch veilige willekeurige data
  • Encoding: Base32-weergave (26 tekens)

Formaatvoorbeeld: 01ARZ3NDEKTSV4RRFFQ69G5FAV

Hoe ULID werkt

  1. Genereer 48 bits voor tijdstempel (Unix-tijd in milliseconden)
  2. Genereer 80 bits cryptografisch veilige willekeurige data
  3. Combineer tijdstempel (meest significant) met willekeurigheid (minst significant)
  4. Codeer de volledige 128-bits waarde met Crockford's Base32-alfabet
  5. Resultaat is een string van 26 tekens (de eerste 10 tekens zijn tijdstempel, de laatste 16 zijn willekeurigheid)

Voordelen & Overwegingen

AdvantagesConsiderations
  • Lexicografisch sorteervriendelijk
  • URL-veilige tekenset
  • Geen speciale codering nodig
  • Case-insensitive
  • Geen privacyzorgen
  • Nieuwere, minder gebruikte
  • Beperkte bibliotheekondersteuning
  • Geen UUID-compatibiliteit
  • Kan niet teruggaan voor 1970

ULID-structuur

ComponentBitsCharactersDescription
Timestamp48 bits10 tekensUnix-timestamp (ms) gecodeerd in Base32
Randomness80 bits16 tekensWillekeurige bytes gecodeerd in Base32

ULID versus UUID vergelijking

FeatureULIDUUID v1UUID v4UUID v7
Size128 bits128 bits128 bits128 bits
Stringlengte26 tekens36 tekens36 tekens36 tekens
Time-based
Natuurlijke sortering
URL veilig
MAC-adresblootstelling
Willekeurige component
Canonieke standaard⚠️ Concept

Veelvoorkomende gebruikssituaties

  • Primaire sleutels in databases: Prestatie-geoptimaliseerde indexen
  • Gedistribueerde systemen: Coördinatie-vrije generatie
  • APIs: Schone, URL-veilige identificaties
  • Tijdreeksgegevens: Natuurlijke chronologische ordening
  • Logsystemen: Sorteerbare gebeurtenisidentificaties
  • Moderne applicaties: Waar UUID-beperkingen problematisch zijn

Waarom kiezen voor ULID?

  • Sortability: Lexicografisch gesorteerd op creatietijd
  • URL-veiligheid: Geen URL-codering nodig (in tegenstelling tot UUID's met streepjes)
  • Compactness: 26 tekens versus 36 voor UUID
  • Hoofdletterongevoeligheid: Vermindert invoerfouten door gebruikers
  • Monotonicity: Optionele monotone sortering binnen dezelfde milliseconde
  • Geen speciale tekens: Eenvoudig, alleen alfanumeriek formaat

Veelgestelde vragen

Hoe verhoudt ULID zich tot UUID v7?

Beide gebruiken Unix-timestamps voor sorteervriendelijkheid en hebben willekeurige componenten. De belangrijkste verschillen zijn codering (Base32 vs hex), formaat (26 tekens vs 36), en standaardisatie (UUID v7 is in concept RFC-specificatie).

Kan ik de creatietijd uit een ULID halen?

Ja. De eerste 10 tekens vertegenwoordigen een millisecondeprecisie Unix-timestamp die kan worden gedecodeerd en omgezet naar een standaard datum/tijd.

Zijn ULID's compatibel met UUID-databasevelden?

Nee. ULID's gebruiken een ander formaat en moeten worden opgeslagen als strings of binaire data in plaats van in native UUID-databasetypen.

Wat is monotonie in ULID's?

Sommige ULID-implementaties bieden een monotone optie die een sequentiële sorteervolgorde garandeert, zelfs binnen dezelfde milliseconde, door de willekeurige component te verhogen voor ULID's die in dezelfde tijdstempel zijn gemaakt.

Welke tekenset gebruikt ULID?

ULID gebruikt Crockford's Base32-codering (0-9, A-Z exclusief I, L, O, U) die is ontworpen om verwarring en transcriptiefouten te minimaliseren wanneer ID's handmatig worden gelezen of ingevoerd.

Resources

Crockford's Base32-alfabet

Codering waardeCharacterNotes
0-90-9Decimale cijfers
10-31A-ZExclusief I, L, O, U voor leesbaarheid

Tekens: 0123456789ABCDEFGHJKMNPQRSTVWXYZ

Deze codering is hoofdletterongevoelig voor decodering (maar ULID's worden meestal in hoofdletters gegenereerd).