ULID-Generator

Generieren Sie ULIDs online: 26-stellige Crockford-Base32-IDs mit 48-Bit-Zeitstempel und 80 zufälligen Bits.

Format
Generierte IDs
Bereit. Generieren Sie ULIDs direkt in Ihrem Browser.

Aufbau dieser ID

Layout
26 Crockford-Base32-Zeichen: 10 Zeichen für die Zeit, gefolgt von 16 zufälligen Zeichen.
Entropie
80 zufällige Bits nach dem 48-Bit-Millisekunden-Zeitstempel.
Zeit
Ja. Die ersten 10 Zeichen codieren die Zeit in Millisekunden, und die lexikalische Sortierung folgt der zeitlichen Reihenfolge.
Kollisionsrisiko
Der zufällige Endteil umfasst 80 Bit; das Risiko hängt hauptsächlich davon ab, wie viele IDs Sie innerhalb derselben Millisekunde generieren.
Beispiel
01M12BRP97DA49FXCYXCN5F37X

Ihre IDs werden lokal mit sicheren Browser-Zufallsfunktionen generiert. Es wird nichts an BroBroGo übertragen.

Häufig gestellte Fragen (FAQ)

Wofür eignet sich eine ULID?

ULID ist kompakt, URL-freundlich und lässt sich als reiner Text zeitlich sortieren. Das ist ideal für Protokolle, Objektschlüssel und Datensätze, die nach Erstellungszeit sortiert werden sollen.

Ist eine ULID das Gleiche wie eine UUID v7?

Nein. Beide enthalten einen Millisekunden-Zeitstempel, aber ULID verwendet Crockford-Base32 und 26 Zeichen, während UUID v7 das standardmäßige hexadezimale UUID-Format beibehält.

Was ist eine ULID und wie ist sie aufgebaut?

Eine ULID (Universally Unique Lexicographically Sortable Identifier) ist ein 128-Bit-Identifikator, der als 26-stelliger Zeichenstring dargestellt wird. Jede ULID besteht aus zwei festen Blöcken: Die ersten zehn Zeichen kodieren einen Zeitstempel mit Millisekunden-Genauigkeit (48 Bit), die restlichen sechzehn Zeichen enthalten eine zufällige Komponente (80 Bit). Dieser Aufbau ergibt insgesamt 128 Bit – genau wie eine UUID, aber in kürzerer Darstellung.

Die Zeichenkodierung erfolgt ausschließlich mit Crockfords Base32-Alphabet. Dieses verwendet die Ziffern 0–9 und die Buchstaben A–Z, jedoch ohne die visuell mehrdeutigen Zeichen I, L, O und U. Dadurch ist das Alphabet groß-/kleinschreibungssensitiv nicht notwendig: „A“ und „a“ werden gleich interpretiert. Bindestriche oder andere Trennzeichen gibt es im ULID-Format nicht. Die 26 Zeichen sind immer ohne Unterbrechung geschrieben.

Was unterscheidet diesen Generator von anderen?

Dieser Generator bietet ausschließlich das ULID-Format an – ohne Umschalter für Großbuchstaben oder Bindestriche, weil diese bei ULID nicht vorkommen. Die Ausgabe ist immer case-insensitiv und hyphenfrei. Im Gegensatz zu UUIDs (36 Zeichen mit Bindestrichen) ist eine ULID zehn Zeichen kürzer und benötigt keine URL-Escaping, da alle verwendeten Base32-Zeichen nach RFC 3986 unreserviert sind.

Die Zeitstempel-Komponente macht ULIDs lexikografisch sortierbar nach Erstellungszeitpunkt. Das ist besonders nützlich für Datenbank-Primärschlüssel, weil neue IDs meist hinter bestehende Werte eingefügt werden – das verbessert die B-Tree-Insertion-Leistung gegenüber zufälligen UUIDs. Allerdings gilt: IDs, die innerhalb derselben Millisekunde generiert werden, sind untereinander nicht strikt geordnet. Die Zufallskomponente bestimmt dann die Reihenfolge, aber eine lexikografische Sortierung ist dennoch nach Millisekunde stabil.

Alle Generierung läuft lokal im Browser mit crypto.getRandomValues() ab. Keine ID wird an einen Server übertragen. Das unterscheidet dieses Tool von Online-Generatoren, die IDs serverseitig erzeugen und potenzielle Datenschutzrisiken bergen.

Eingaben und Ausgaben im Überblick

Die Bedienung ist auf das Nötigste reduziert. Als Eingabe wählt man die Anzahl der gewünschten ULIDs – eine ganze Zahl zwischen 1 und 100. Das Format steht fest auf ULID; es gibt keine weiteren Optionen wie Groß-/Kleinschreibung oder Trennzeichen, weil das ULID-Format diese nicht vorsieht.

Nach Klick auf „Generieren“ erscheint eine Liste mit der angeforderten Anzahl von Zeichenketten. Daneben wird die Anzahl der generierten IDs angezeigt. Der Status wechselt von „Bereit.“ auf „Generiert.“. Ein Klick auf eine einzelne ULID kopiert diese in die Zwischenablage. Ein Klick auf „Alle kopieren“ kopiert die gesamte Liste; der Status wechselt dann auf „Alle kopiert!“.

Wird eine andere Anzahl eingegeben oder das Format (sofern auf der Seite überhaupt umschaltbar, hier fest) geändert, werden die IDs neu generiert. Die Werte außerhalb des Bereichs 1–100 werden nicht akzeptiert.

Die innere Logik: Timestamp und Zufallskomponente

Die ersten zehn Zeichen einer ULID stellen den 48-Bit-Zeitstempel dar. Dieser wird aus der Unix-Zeit in Millisekunden berechnet und mit Crockfords Base32 kodiert. Die restlichen 16 Zeichen enthalten 80 Bit Zufallsdaten, ebenfalls Base32-kodiert. Der gesamte 128-Bit-Wert setzt sich also aus 48 Bit Zeitstempel und 80 Bit Zufall zusammen.

Die Zufallszahlen werden mit crypto.getRandomValues() (Web Crypto API) erzeugt, einem kryptografisch starken Zufallsgenerator. Dadurch ist garantiert, dass jeder der 80 zufälligen Bits unabhängig und unvorhersagbar ist. Die Kollisionswahrscheinlichkeit zweier ULIDs (bei unterschiedlichen Millisekunden) ist extrem gering: Bei 80 Bit Zufall gibt es 2^80 ≈ 1,2 · 10^24 mögliche Werte. Selbst wenn pro Millisekunde 10.000 IDs generiert werden, liegt die Wahrscheinlichkeit einer Kollision nach dem Geburtstagsparadoxon bei etwa 10^-15 pro Millisekunde. Das ist für praktisch alle Anwendungen ausreichend. Innerhalb derselben Millisekunde steigt das Risiko natürlich; der Standard empfiehlt daher, die ersten 48 Bit als Zeitstempel zu betrachten und die restlichen 80 Bit als hinreichend große Zufallsmenge.

Sortierverhalten und praktische Grenzen

Lexikografische Sortierung funktioniert bei ULIDs nach dem Schema: Zuerst nach dem Zeitstempel (höhere Werte = spätere Zeitpunkte), dann nach der Zufallskomponente. Das bedeutet, dass IDs aus derselben Millisekunde in einer nicht vorhersagbaren Reihenfolge erscheinen, aber sie liegen immer zwischen den Blöcken benachbarter Millisekunden. Für viele Anwendungen ist das ausreichend: Ein Datensatz, der später angelegt wurde, hat eine größere ID als ein früherer – außer bei exakt gleichem Zeitstempel.

In Datenbanken führt dieses monotone Einfügen zu weniger Seiten-Splits in B-Bäumen als bei völlig zufälligen UUIDs. Manche Datenbanken unterstützen sogar die Sortierung direkt auf dem ID-Feld. Allerdings erzeugt die Timestamp-Komponente eine gewisse Vorhersagbarkeit: Der Zeitpunkt der Erstellung lässt sich aus den ersten zehn Zeichen ableiten. Das ist bei UUID v4 nicht der Fall. Für sicherheitskritische Open-Source-Bereiche, in denen IDs nicht erratbar sein müssen, ist ULID trotzdem geeignet, weil die Zufallskomponente 80 Bit stark ist.

Für wen ist dieser Generator gedacht?

  • Web- und Mobile-Entwickler, die kürzere, URL-sichere Identifikatoren benötigen, die ohne separate Zeitstempelspalte sortiert werden können.
  • Datenbankadministratoren, die Primärschlüssel entwerfen, die die B-Tree-Leistung verbessern, da neue IDs grob monoton steigen.
  • Systemarchitekten in verteilten Systemen, die eindeutige, sortierbare und dennoch kompakte IDs über mehrere Knoten hinweg benötigen.
  • API-Designer, die öffentliche IDs ausgeben, die schwer zu erraten sind, aber menschenfreundlich bleiben (keine Verwechslung durch Groß-/Kleinschreibung, keine Bindestrich-Mehrdeutigkeit).
  • Jeder, der UUIDs als zu lang oder umständlich empfindet und einen 128-Bit-Ersatz mit kleinerer Darstellung sucht.

Der Generator liefert genau das – ohne zusätzliche Optionen, die beim ULID-Format keinen Sinn ergeben.

Häufig gestellte Fragen (FAQ)

Kann ich ULIDs mit Groß-/Kleinschreibung generieren?
Nein. ULID verwendet Crockfords Base32, das case-insensitiv ist. Der Generator gibt immer eine Mischung aus Groß- und Kleinbuchstaben aus? Tatsächlich werden bei der Base32-Kodierung üblicherweise Großbuchstaben verwendet. Die Bedeutung ist jedoch unabhängig von der Groß-/Kleinschreibung. Der Generator erzeugt alle Zeichen in Großbuchstaben, aber Sie können sie problemlos in Kleinbuchstaben umwandeln – die ID bleibt gültig.

Warum gibt es keine Bindestriche?
Der ULID-Standard sieht keine Trennzeichen vor. Anders als UUIDs (die nach RFC 4122 Bindestriche enthalten) wird die ULID als durchgehender 26-Zeichen-String dargestellt.

Wie hoch ist die Kollisionswahrscheinlichkeit?
Bei 80 Bit Zufallskomponente gibt es 2^80 ≈ 1,2 · 10^24 mögliche Werte. Für die meisten Anwendungen ist das praktisch kollisionsfrei. Selbst bei 10.000 IDs pro Millisekunde liegt die Wahrscheinlichkeit einer Kollision in der gleichen Millisekunde unter 10^-12.

Kann ich die IDs sortieren?
Ja, lexikografisch. IDs mit größerem Zeitstempel sind größer als solche mit kleinerem. IDs aus der gleichen Millisekunde sind nicht streng nach Zeit sortiert, aber ihre relative Reihenfolge ist durch die Zufallskomponente bestimmt. Für die meisten Sortierzwecke ist das ausreichend.

Werden meine IDs an einen Server gesendet?
Nein. Die Generierung erfolgt vollständig lokal im Browser mit crypto.getRandomValues(). Es werden keine Daten übertragen.

Kann ich mehr als 100 ULIDs auf einmal generieren?
Nein. Der Generator akzeptiert nur Werte zwischen 1 und 100. Das ist eine bewusste Begrenzung, um die Benutzeroberfläche einfach zu halten und die Lesbarkeit der Liste zu gewährleisten. Sie können aber beliebig oft neue Sätze generieren.