ULID-Generator

Erzeugen Sie in großer Zahl ULIDs — chronologisch sortierbare Kennungen, die sich als Alternative zu UUIDs eignen.

Was das Erzeugen von ULIDs bedeutet

ULIDs zu erzeugen heißt, in einem Zug global eindeutige Bezeichner auszugeben, die sich nach der Zeit sortieren lassen – den Universally Unique Lexicographically Sortable Identifier. Eine ULID ist eine 26 Zeichen lange Crockford-Base32-Zeichenkette, deren erste 10 Zeichen den Zeitpunkt der Erzeugung kodieren und deren übrige 16 aus einer kryptografisch sicheren Zufallsquelle stammen. Anders als ein durchweg zufälliger Bezeichner wie UUID v4 hat sie den großen Vorzug, dass ein alphabetisches Sortieren der Zeichenketten sie zugleich in die Reihenfolge ihrer Entstehung bringt.

Dieses Werkzeug bezieht den Zufallsteil aus crypto.getRandomValues() der Web Crypto API, die Quelle ist also kryptografisch sicher und kein bloßer Pseudozufallsgenerator. Alles geschieht im Browser: Weder die eingegebene Anzahl noch die erzeugten Bezeichner werden an einen Server gesendet. Bis zu 1.000 lassen sich auf einmal erzeugen, und die Ausgabe steht wahlweise in Großbuchstaben – der kanonischen Form der Spezifikation – oder in Kleinbuchstaben bereit.

So erzeugen Sie ULIDs

  1. Anzahl eingeben Tragen Sie ein, wie viele ULIDs auf einmal ausgegeben werden sollen – zwischen 1 und 1.000.
  2. Über Kleinschreibung entscheiden Setzen Sie das Häkchen für Kleinbuchstaben, wenn Sie sie in einer URL oder einem Protokoll einheitlich halten wollen. Beide Schreibweisen sind laut Spezifikation gültig.
  3. Auf „Erzeugen“ klicken Die gewünschte Zahl an ULIDs, mit der aktuellen Zeit im Zeitstempelteil, wird zusammen aufgelistet.
  4. Ergebnisse kopieren Kopieren Sie sie einzeln oder übernehmen Sie mit „Alle kopieren“ die gesamte, durch Zeilenumbrüche getrennte Liste.

Tipps für die Nutzung

  • Die ersten 10 Zeichen einer ULID kodieren einen Zeitstempel (den Erzeugungszeitpunkt), die restlichen 16 Zeichen sind zufällig. Außer wenn zwei ULIDs innerhalb derselben Millisekunde erzeugt werden, genügt eine einfache Sortierung als Zeichenkette, um die Erzeugungsreihenfolge wiederherzustellen.
  • Wird als Primärschlüssel einer Datenbank ein vollständig zufälliger UUID v4 verwendet, führt dies dazu, dass neue Zeilen an zufälligen Positionen im Index eingefügt werden, was leicht zur Fragmentierung von B-Tree-Indizes führt. Da ULIDs annähernd zeitlich sortiert sind, werden neue Zeilen meist nahe dem Ende des Index eingefügt, was dieses Problem abmildert.
  • Eine ULID wird als 26 Zeichen in Crockfords Base32 dargestellt (das 32-Zeichen-Alphabet `0`-`9` und `A`-`Z`, aus dem die leicht zu verwechselnden Buchstaben I, L, O und U entfernt wurden). Damit ist sie kürzer als eine UUID (36 Zeichen inklusive Bindestriche) und lässt sich auch in Umgebungen ohne Unterscheidung von Groß- und Kleinschreibung sicher verwenden.
  • Einen Formatvergleich mit Nano ID und UUID v4 finden Sie in der Vergleichstabelle auf unserem Schwestertool, der Nano-ID-Generator-Seite.

Wofür sich ULIDs eignen

Primärschlüssel und Datensatzkennungen in einer Datenbank

Wenn Sie ULIDs als Primärschlüssel einer neuen Tabelle vorsehen, können Sie früh in der Entwicklung einen Stapel Kennungen für Testdatensätze und Seed-Daten bereitstellen.

Ereigniskennungen in einem ereignisgetriebenen System

Wo jedes Ereignis in einer Nachrichtenwarteschlange oder einem verteilten System eine eindeutige Kennung braucht, sortieren ULIDs nach Zeit – was das chronologische Verfolgen der Protokolle erheblich erleichtert.

Beispielhafte Protokoll- und Ablaufkennungen

Erzeugen Sie im echten Format Kennungen, um eine Protokollplattform oder ein Tracing-Werkzeug zu prüfen oder vorzuführen.

Vergleich mit anderen Kennungsformaten

Wenn Sie zwischen ULID, UUID v4, UUID v7 oder Nano ID für Kurz-URLs abwägen, vergleichen Sie zuerst Aussehen und Länge. Siehe auch UUID-Erzeugung, UUID-v7-Erzeugung und Nano-ID-Erzeugung.

Begriffe rund um ULIDs

ULID
Kurz für Universally Unique Lexicographically Sortable Identifier. Ein 128-Bit-Bezeichner, dessen führende 48 Bit den Erzeugungszeitpunkt tragen, sodass allein das Sortieren der Zeichenketten die chronologische Reihenfolge herstellt.
Crockford Base32
Eine Kodierung mit 32 Zeichen: den Ziffern 0–9 und den Buchstaben A–Z ohne die leicht verwechselbaren I, L, O und U. Eine ULID wird auf diese Weise in 26 Zeichen kodiert.
Monotonie
Die Eigenschaft eines Wertes, im Zeitverlauf stets zu wachsen. Eine ULID sichert keine Reihenfolge, wenn mehrere in derselben Millisekunde entstehen; die in der Spezifikation vorgesehene monotone Erzeugung erhält das Wachstum auch dann.
UUID
Kurz für Universally Unique Identifier. Der in RFC 4122 festgelegte Standard für 128-Bit-Bezeichner, gewöhnlich als 36 hexadezimale Zeichen samt Bindestrichen geschrieben. Ein von ULID unabhängiger Standard.
Eindeutige Kennungen in verteilten Systemen
Die Anordnung, bei der mehrere Server oder Prozesse unabhängig voneinander kollisionsfreie Kennungen erzeugen, ohne eine zentrale Vergabestelle zu fragen. ULID und UUID verbinden dazu Erzeugungszeit und Zufall, sodass die Kollisionswahrscheinlichkeit verschwindend klein wird.
Zeitstempelteil
Die ersten 10 Zeichen einer ULID: ein 48-Bit-Wert, der die Erzeugungszeit in Millisekunden als Crockford Base32 kodiert. Er ist der Kern des Mechanismus, der die Erzeugungsreihenfolge allein aus dem Zeichenkettenvergleich erkennbar macht.

Häufig gestellte Fragen

Eine ULID (Universally Unique Lexicographically Sortable Identifier) ist eine Spezifikation für Kennungen, die ähnlich wie eine UUID global eindeutig sind, zusätzlich aber Informationen über den Erzeugungszeitpunkt enthalten — sodass ein einfaches Sortieren als Zeichenkette sie in chronologischer Reihenfolge anordnet.

Der wichtigste Unterschied ist, ob sich die Kennung nach dem Erzeugungszeitpunkt sortieren lässt. Eine UUID v4 ist ein vollständig zufälliger 128-Bit-Wert und lässt sich daher nicht nach Erzeugungsreihenfolge sortieren, während die ersten 48 Bit einer ULID einen Zeitstempel in Millisekunden darstellen, sodass ein einfacher Zeichenkettenvergleich die Erzeugungsreihenfolge offenbart. Auch bei der Darstellung gibt es Unterschiede: Eine ULID besteht aus 26 Base32-Zeichen, eine UUID aus 36 hexadezimalen Zeichen inklusive Bindestriche.

Wird ein vollständig zufälliger Wert wie UUID v4 als Primärschlüssel verwendet, werden neue Zeilen an zufälligen Positionen im Index eingefügt, was zur Fragmentierung des B-Tree-Index und zu geringerer Cache-Effizienz führen kann. Da ULIDs annähernd zeitlich sortiert sind, werden neue Zeilen tendenziell nahe dem Ende des Index angehängt, was dieses Problem abmildern soll.

Die ersten 10 Zeichen sind ein 48-Bit-Zeitstempel in Millisekunden (der Daten bis etwa zum Jahr 10889 darstellen kann), die restlichen 16 Zeichen sind 80 Bit Zufallswerte. Insgesamt ergibt das 128 Bit — genauso viel wie bei einer UUID —, jedoch mit eingebetteter Zeitinformation, was das charakteristische Merkmal der ULID ist.
Tool-kun

Übrigens – wie ULID die chronologische Ordnung in die Welt der IDs brachte

Die ULID-Spezifikation wurde 2016 von Alizain Feerasta veröffentlicht. Zu dieser Zeit war UUID bereits der Standard zur Erzeugung eindeutiger IDs in verteilten Systemen, doch seine vollständig zufällige Natur — die eine Sortierung unmöglich machte — galt als unpraktisch für die Effizienz von Datenbankindizes und für die zeitliche Analyse von Logs. Genau dieses Problem sollte ULID lösen.

Tatsächlich besitzt auch UUID zeitbasierte Varianten: Version 1 (MAC-Adresse plus Zeitstempel) und Version 7 (2024 standardisiert, eine Kombination aus Zeitstempel und Zufallswerten). ULID ist jedoch eine eigenständige Spezifikation, unabhängig vom UUID-Standard (RFC 4122), und zeichnet sich durch ein einfacheres Design sowie eine kompakte Base32-Darstellung aus.

Heute existieren für nahezu alle wichtigen Programmiersprachen Implementierungsbibliotheken für ULID, und es wird überall dort eingesetzt, wo die Erzeugungsreihenfolge erhalten bleiben soll: bei Ereignis-IDs in verteilten Systemen, Trace-IDs in Logs und Primärschlüsseln in Datenbanken. In der Designphilosophie überschneidet es sich stark mit dem etwa zeitgleich entstandenen UUID v7, und beide existieren nebeneinander als unterschiedliche Ansätze für dasselbe Ziel: eine sortierbare, UUID-ähnliche Kennung.