UUID Generator

v4 (random), v7 (zeitbasiert), v1, NIL — bis zu 1000 auf einmal

Was ist eine UUID?

Eine UUID (Universally Unique Identifier) ist ein 128-Bit-Wert, der weltweit eindeutige Kennungen ohne zentrale Vergabestelle erzeugt. Sie ist in RFC 4122 (Klassik) und RFC 9562 (UUIDv6/7/8) standardisiert. Dargestellt als 32 Hexadezimalziffern in 5 durch Bindestriche getrennten Gruppen.

Welche UUID-Version brauche ich?

  • v4: zufällig, sicher, häufigste Wahl für Datenbank-IDs
  • v7: zeitgeordnet, ideal für Datenbank-Indices und chronologische Sortierung
  • v1: Zeitstempel + MAC-Adresse (Legacy, kann Metadaten leaken)
  • NIL: alle Bits Null — als Platzhalter für "keine UUID"

Wie zufällig sind UUIDs?

Bei UUIDv4 sind 122 von 128 Bits zufällig (die anderen 6 sind Version und Variante). Die Kollisionswahrscheinlichkeit ist astronomisch klein: Selbst bei einer Milliarde UUIDs pro Sekunde über 85 Jahre wäre die Wahrscheinlichkeit einer Kollision noch unter 50 %. Praktisch heißt das: UUIDs gelten als kollisionsfrei. Dieses Tool nutzt die Web Crypto API (crypto.getRandomValues) für kryptografisch starke Zufallszahlen.

Anatomie einer UUID: 128 Bit, fünf Felder, ein Standard

Eine UUID besteht aus 128 Bit, traditionell als 32 Hex-Zeichen mit 4 Bindestrichen geschrieben — also 36 Zeichen Gesamtlänge. Die Felder sind time_low (8) - time_mid (4) - time_hi_and_version (4) - clock_seq (4) - node (12). Die Version steht im ersten Nibble der dritten Gruppe (Position 13), die Variant im ersten Nibble der vierten Gruppe (Position 17). Eine v4-UUID erkennt man am 4 an Position 13 und einem Wert in {8, 9, a, b} an Position 17.

Die Norm RFC 4122 von 2005 definierte die klassischen Versionen 1-5. RFC 9562 (Mai 2024) löste sie ab und führte v6, v7 und v8 als offizielle Standards ein. Davor existierten v6 und v7 nur als Industrie-Konventionen (z.B. ULID, KSUID, Snowflake). Die wichtigste Neuerung ist v7: 48 Bit Unix-Millisekunden als Präfix, dann 74 Bit Zufall — damit sind die UUIDs in der Generierungsreihenfolge sortierbar, was bei B-Tree-Indices in PostgreSQL oder MySQL einen drastischen Performance-Schub bringt.

Warum kein einfacher Auto-Increment-Integer? UUIDs ermöglichen client-seitige ID-Generierung (kein Round-Trip zur DB nötig), verhindern das Erraten von IDs (kein /api/order/1234 -> 1235) und sind eindeutig über Sharding-Grenzen oder verteilte Systeme hinweg. Die Kehrseite: 16 Byte statt 4 oder 8 Byte pro Index-Eintrag, schlechtere Cache-Lokalität bei v4 (zufällige Einfügungen verteilen sich über den ganzen Index), Lesbarkeit für Menschen. v7 mildert den Index-Nachteil deutlich.

Bit-Layout und Geburtstags-Mathematik

Wie viele UUIDs muss man erzeugen, bevor eine Kollision wahrscheinlich wird? Mit der Geburtstags-Approximation gilt für eine 50%-Kollisionswahrscheinlichkeit grob:

n ≈ sqrt(2 * 2^B * ln(2))

wobei B = effektive Zufallsbits.

Version   Zufallsbits   50%-Kollision nach
---------+-------------+----------------------
v4              122      ~2.7 * 10^18 UUIDs
v7               74      ~1.6 * 10^11 UUIDs (pro Millisekunde-Bucket)
v1            < 48      Sekunden bei viel Traffic

UUIDv4-Layout (Hex):
  xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
               ^    ^
           Version Variant (y in {8,9,a,b})

Konkrete Anwendungsfälle

UUIDs sind das Standardwerkzeug, sobald eine ID außerhalb einer einzelnen Datenbankzeile lebt. Hier fünf typische Szenarien:

  • Datenbank-Primärschlüssel — PostgreSQL: id UUID PRIMARY KEY DEFAULT gen_random_uuid(). Für Tabellen mit über 100 Millionen Zeilen v7 verwenden: die zeitliche Ordnung hält den B-Tree-Index kompakter und beschleunigt INSERTs um Faktor 2-5x gegenüber v4.
  • Idempotency-Keys in REST-APIs — Stripe und PayPal verlangen einen Idempotency-Key Header für POST-Requests, damit ein Retry nach Timeout nicht zwei Zahlungen auslöst. UUIDv4 ist hier Industrie-Standard: der Client erzeugt einen Key wie 3f29c3e0-b5c1-4f1a-9d4d-7c5b21a4e2f0, der Server cached die Antwort 24 Stunden unter diesem Key.
  • S3- und CDN-Dateinamen — Uploads erhalten eine UUID statt des Originalnamens: s3://bucket/uploads/8d3a9e7c-...-da12fb.pdf. Verhindert Kollisionen und macht öffentliche Links unratbar (Capability-URL-Pattern). Bei Bildern oft kombiniert mit Hash für Content-Addressing.
  • Distributed Tracing — OpenTelemetry verwendet zwar 64-Bit-Span-IDs und 128-Bit-Trace-IDs (nicht ganz UUID-Format, aber gleiche Größenklasse). Custom Correlation-IDs in Logs und HTTP-Headern (X-Request-ID: ...) sind häufig UUIDv4. Ermöglicht, einen Request über 20 Microservices hinweg zu folgen.
  • Offline-First-Apps — Notion, Linear oder Figma erzeugen IDs auf dem Client, damit eine Entität (Task, Page, Frame) sofort verlinkbar ist, noch bevor der Sync zum Server läuft. v4 oder v7; bei v7 ist die Erstellungs-Reihenfolge sogar im Schlüssel sichtbar, was Sync-Konflikte einfacher macht.

Grenzen, Fallen und wann UUIDs nicht passen

UUIDs sind nicht magisch. Drei häufige Fallen: (1) v4 als Primärschlüssel auf großen Tabellen — die zufällige Einfügereihenfolge zerschießt B-Tree-Index-Lokalität und Write-Ahead-Logs. Lösung: v7 oder ULID. (2) v1 in öffentlichen Systemen — die ersten 60 Bit kodieren einen Timestamp und Teile der MAC-Adresse, was Privacy-Probleme erzeugt (siehe "Cohen UUID"-Geschichte). (3) v4 für Sicherheits-Token ist OK (122 Bit Entropie sind genug), aber wenn der UUID-Generator nicht crypto.getRandomValues nutzt, sondern Math.random(), ist alles verloren. Prüfe vor dem Einsatz: erzeugt deine UUID-Library nachweislich kryptografisch sichere v4-IDs? Node.js crypto.randomUUID() ja, ältere Polyfills oft nein.

Häufige Fragen

Soll ich UUIDv4 oder UUIDv7 verwenden?
Default ist seit RFC 9562 (2024) v7, wenn die ID irgendwo als Datenbank-Schlüssel oder Sortierschlüssel landet. v4 ist die richtige Wahl für Tokens, Session-IDs, Idempotency-Keys oder alles, wo die Erstellungszeit nicht leakbar sein soll. v7 enthält den Timestamp lesbar in den ersten 48 Bit (~6 Hex-Zeichen) — das ist bei Bestellungs- oder User-IDs oft kein Problem, bei API-Keys aber unerwünscht.
Ist crypto.randomUUID() sicher und schnell?
Ja zu beidem. Die Web Crypto API ist in allen modernen Browsern (Chrome 92+, Firefox 95+, Safari 15.4+, Node.js 19+) implementiert und nutzt den CSPRNG des Betriebssystems. Auf Standard-Hardware liegt der Durchsatz bei mehreren Millionen UUIDs pro Sekunde. Dieser Generator nutzt dieselbe API für v4; für v7 und v1 wird der gleiche Pool (über crypto.getRandomValues) angezapft.
Kann eine UUID kollidieren?
Theoretisch ja, praktisch ist es ausgeschlossen. Bei UUIDv4 (122 Zufallsbits) brauchst du ca. 2.7 * 10^18 UUIDs für eine 50%-Kollisionswahrscheinlichkeit — das ist 100x mehr als die Anzahl Atome im sichtbaren Universum geteilt durch... ok, die Größenordnung sprengt sinnvolle Vergleiche. Realistische Kollisionen entstehen nur durch buggy Generatoren (kein CSPRNG, gebrochener Seed), nicht durch Pech.
Was ist der Unterschied zwischen UUID und GUID?
Keiner technisch. GUID (Globally Unique Identifier) ist Microsofts Bezeichnung für die gleiche 128-Bit-Struktur. Die einzige Auffälligkeit: Microsoft-Tools zeigen GUIDs traditionell uppercase und in geschweiften Klammern an: {8D3A9E7C-1F2B-4A5D-9E0F-DA12FB44A1C2}. Du kannst beide Formate über die Format-Option dieses Tools umschalten.
Sollte ich UUIDs als VARCHAR oder als nativen UUID-Typ speichern?
Nativ, wo möglich. PostgreSQL und SQL Server haben einen 16-Byte-UUID-Typ, MySQL 8+ über BINARY(16). VARCHAR(36) braucht 36 Byte statt 16 — also 2.25x mehr Speicher, 2.25x mehr I/O, langsamere Index-Scans. Bei MySQL hilft UUID_TO_BIN(..., 1) zusätzlich, die UUID umzuordnen, damit der Timestamp am Anfang steht (Pseudo-v7). Bei v7 ist diese Umordnung schon nativ drin.
Gibt es kürzere Alternativen zu UUIDs?
Ja, mehrere: ULID (26 Crockford-Base32-Zeichen, time-sortierbar, faktisch der v7-Vorgänger), NanoID (21 URL-sichere Zeichen, ~126 Bit Entropie, ohne Bindestriche), KSUID (27 Zeichen, 32 Bit Timestamp + 128 Bit Zufall). Für URLs sind NanoID oder Base62-encodierte UUIDs (22 Zeichen) angenehmer. Für maximale Kompatibilität mit DB-Spalten, Logs und Standards bleibt UUIDv7 die sicherste Wahl.

Verwandte Tools