Effizienter CUID-Generator für eindeutige Bezeichner in Systemen
Generieren Sie kollisionsresistente eindeutige Bezeichner (CUIDs) für verteilte Systeme, Datenbanken und Webanwendungen. Erstellen Sie skalierbare, sortierbare IDs sofort.
CUID-Generator
Generieren Sie schnell und einfach eine kollisionsresistente ID.
Dokumentation
Was ist ein CUID?
Ein CUID (kollisionsresistenter eindeutiger Bezeichner) ist eine kurze Zeichenfolge aus Buchstaben und Ziffern, mit der ein Datensatz, eine Datei oder ein Ereignis gekennzeichnet wird, sodass keine zwei Elemente denselben Namen haben. Dieses Tool erzeugt CUID2, die aktuelle Version des Formats, mithilfe der Bibliothek @paralleldrive/cuid2. Jede ID ist 25 Zeichen lang, enthält ausschließlich Kleinbuchstaben und Ziffern und wird vollständig im Browser erstellt – nichts wird an einen Server gesendet.
So verwenden Sie diesen CUID-Generator
- Klicken Sie auf Generate New CUID, um eine ID zu erstellen.
- Klicken Sie auf Copy to Clipboard, um sie zu kopieren.
- Fügen Sie die ID in eine Datenbank, einen Dateinamen oder eine Anwendung ein.
- Klicken Sie erneut auf „Generate“, um eine weitere ID zu erzeugen. Kollisionen zwischen separaten Werten von CUID2 sind äußerst unwahrscheinlich, mathematisch jedoch nicht unmöglich.
- Klicken Sie auf Reset, um das Ergebnis zu löschen.
Die erzeugte ID wird auch in der URL der Seite gespeichert, sodass ein Link zum Ergebnis geteilt oder als Lesezeichen gespeichert werden kann.
Struktur und Formel von CUID2
Ein CUID2 wird folgendermaßen aufgebaut:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Die Hashfunktion kombiniert vier interne Eingaben: die aktuelle Zeit, einen sitzungsbezogenen Zähler, einen Fingerabdruck des Hostcomputers und Zufallsentropie. Sie verarbeitet diese mit SHA3-512, wandelt das Ergebnis in das Zahlensystem zur Basis 36 um (Ziffern 0–9 und Buchstaben a–z) und behält davon 24 Zeichen. Der zufällige Anfangsbuchstabe bringt die fertige ID auf 25 Zeichen, die für dieses Tool festgelegte Länge.
Nur das erste Zeichen steht für sich allein: Ein zufälliger Buchstabe wird an den Anfang gesetzt, damit jede ID mit einem Buchstaben statt mit einer Ziffer beginnt. Viele Systeme, etwa SQL-Tabellen- und Spaltennamen, verlangen, dass Bezeichner mit einem Buchstaben beginnen. Dadurch kann ein CUID2 fast überall sicher als Name verwendet werden. Jedes Zeichen nach diesem ersten Buchstaben ist Teil eines einzigen zusammenhängenden, nicht weiter unterteilten Hashteils – er besteht nicht aus separaten Abschnitten.
Da der Hash nur in eine Richtung funktioniert, lässt sich keine seiner Eingaben aus der fertigen ID zurückgewinnen. Ein CUID2 enthält keinen wiederherstellbaren Zeitstempel, Zähler oder Fingerabdruck. Dies ist eine bewusste Entscheidung für Datenschutz und Sicherheit: Allein eine ID kann nicht verraten, wann oder wo sie erstellt wurde.
Rechenbeispiel
Beim Erzeugen einer ID mit diesem Tool könnte Folgendes entstehen:
1vcpuhcj51eomj1o31dnlqopu0
2Hier ist v der zufällige Anfangsbuchstabe und cpuhcj51eomj1o31dnlqopu0 (24 Zeichen) der Hashkörper. Die beiden Teile sehen nur deshalb unterschiedlich aus, weil das erste Zeichen garantiert ein Buchstabe ist – der Hashkörper kann eine Mischung aus Buchstaben und Ziffern enthalten.
Warum Systeme CUID2 verwenden
- Keine Koordination erforderlich. Jeder Computer kann selbstständig eine gültige ID erzeugen, ohne bei einem zentralen Server oder einer Datenbank den nächsten Wert anzufordern.
- Kollisionsresistenz. Die Kombination aus Zeit, Zähler, Hostfingerabdruck und zufälliger Entropie macht es äußerst unwahrscheinlich, dass zwei Computer dieselbe ID erzeugen, selbst wenn sie viele IDs pro Sekunde generieren.
- Für URLs geeignet. Ein CUID2 verwendet ausschließlich Kleinbuchstaben und Ziffern und muss daher für die Verwendung in einer Webadresse nie codiert werden.
- Schnelle, private Erzeugung. Da dieses Tool den Generator im Browser ausführt, werden IDs sofort erstellt und verlassen das Gerät nie.
IDs von CUID2 sind nicht nach dem Erstellungszeitpunkt sortierbar. Anders als eine automatisch inkrementierte Datenbanknummer oder das ältere CUID-Format (Version 1) verbirgt ein CUID2 seinen Zeitstempel im Hash, statt ihn sichtbar zu speichern. Anwendungen, die Datensätze nach ihrer Erstellungsreihenfolge sortieren müssen, sollten neben der ID eine separate Zeitstempelspalte speichern.
CUID2 im Vergleich zu UUID und automatisch inkrementierten IDs
| Merkmal | CUID2 | UUID v4 | Automatisch inkrementiert |
|---|---|---|---|
| Länge | 25 Zeichen | 36 Zeichen (mit Bindestrichen) | Variiert (gewöhnlich eine kurze Zahl) |
| Zeichensatz | Kleinbuchstaben und Ziffern | Hexadezimalziffern und Bindestriche | Ziffern |
| Benötigt zentrale Koordination | Nein | Nein | Ja (eine Datenbanksequenz) |
| Nach Erstellungszeit sortierbar | Nein | Nein | Ja |
| Ohne Codierung für URLs geeignet | Ja | Ja | Ja |
CUID2 und UUID v4 lösen dasselbe Problem: das Erzeugen von IDs ohne zentrale Koordination. CUID2 ist kürzer und verwendet einen kleineren Zeichensatz, wodurch es leichter zu lesen und in eine URL einzufügen ist. Eine UUID kann ebenfalls sicher in einer Webadresse verwendet werden, da der Bindestrich in URLs ein nicht reserviertes Zeichen ist; sie ist jedoch 11 Zeichen länger.
Häufige Anwendungen
- Primärschlüssel in verteilten Datenbanken, in denen mehrere Server unabhängig voneinander Zeilen einfügen
- Anforderungs- oder Trace-IDs, mit denen eine Aktion über mehrere Microservices hinweg verfolgt wird
- Dateinamen für Uploads, damit niemals eine Datei eine andere überschreibt
- Sitzungs- oder Token-IDs für Webanwendungen
- Nachrichten-IDs in Warteschlangen wie Kafka oder RabbitMQ
Ein kurzer Abriss
Das ursprüngliche CUID-Format wurde von Eric Elliott in 2012 als Alternative zu UUIDs für verteilte Anwendungen veröffentlicht. CUID2, das von demselben Paralleldrive-Projekt veröffentlicht wurde, gestaltete das Format rund um einen kryptografischen Hash neu und entfernte den wiederherstellbaren Zeitstempel und Zähler, die die ursprüngliche Version preisgab. Dieses Tool erzeugt ausschließlich IDs von CUID2.
Häufig gestellte Fragen
Was ist der Unterschied zwischen CUID (v1) und CUID2? CUID v1 speicherte einen sichtbaren Zeitstempel und Zähler in der ID. Dadurch waren IDs sortierbar, verrieten aber auch, wann und wie viele IDs erstellt worden waren. CUID2 ersetzt diese sichtbaren Felder durch einen unidirektionalen Hash, sodass keine Informationen aus der ID zurückgelesen werden können.
Sind die CUIDs dieses Tools nach dem Erstellungszeitpunkt sortierbar? Nein. Ein CUID2 enthält keinen wiederherstellbaren Zeitstempel. Daher können IDs nicht allein anhand der Zeichenfolge nach dem Zeitpunkt ihrer Erzeugung geordnet werden.
Wie lang ist eine erzeugte ID, und kann die Länge geändert werden? Dieses Tool erzeugt immer IDs mit 25 Zeichen. In diesem Tool gibt es keine Option, eine andere Länge anzufordern.
Können zwei verschiedene Computer gleichzeitig dasselbe CUID2 erzeugen? Theoretisch ist das möglich, in der Praxis jedoch äußerst unwahrscheinlich. Jede ID kombiniert einen hostspezifischen Fingerabdruck mit zufälliger Entropie, sodass unabhängige Computer mit sehr geringer Wahrscheinlichkeit jemals denselben Hash erzeugen.
Sendet dieses Tool Daten an einen Server? Nein. Die ID wird von JavaScript im Browser mithilfe der lokalen Systemuhr und der vom Browser bereitgestellten Zufallswerte erzeugt. Es wird nichts übertragen.
Kann ich ein CUID2 als Primärschlüssel einer Datenbank verwenden?
Ja. IDs von CUID2 eignen sich gut als Primärschlüssel in verteilten Datenbanken, da jeder Knoten eine ID erzeugen kann, ohne eine zentrale Sequenz abzufragen. Sie sind nicht automatisch nach der Einfügezeit sortiert. Eine Anwendung, die diese Reihenfolge benötigt, sollte daher eine separate Spalte created_at führen.