Developer Tools

UUID (Universally Unique Identifier) verständlich erklärt

Eine UUID (Universally Unique Identifier, auch bekannt als GUID oder Globally Unique Identifier) ist eine 128-Bit-Zahl, die verwendet wird, um Informationen in Computersystemen ohne zentrale Koordinierungsstelle eindeutig zu identifizieren.

Der grosse Vorteil einer UUID liegt darin, dass jedes System auf der Welt eine UUID erzeugen kann, ohne sich mit einer zentralen Instanz oder Datenbank abzustimmen, während gleichzeitig garantiert ist, dass diese UUID weltweit einzigartig ist.


Aufbau und Format einer UUID

Obwohl eine UUID eine 128-Bit-Zahl ist, wird sie üblicherweise in einer für Menschen lesbaren Form als hexadezimale Zeichenkette dargestellt. Diese Darstellung ist in fünf Gruppen unterteilt, die durch Bindestriche getrennt sind:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

Das Format besteht aus exakt 36 Zeichen (32 Hexadezimalzeichen und 4 Bindestriche):

  • Gruppe 1 (8 Zeichen): time_low (32 Bit)
  • Gruppe 2 (4 Zeichen): time_mid (16 Bit)
  • Gruppe 3 (4 Zeichen): time_hi_and_version (16 Bit) - Das Zeichen an Stelle M deklariert die Version der UUID (z. B. 4 für UUIDv4).
  • Gruppe 4 (4 Zeichen): clock_seq_and_reserved (16 Bit) - Das Zeichen an Stelle N deklariert die Variante (meist 8, 9, a oder b).
  • Gruppe 5 (12 Zeichen): node (48 Bit)

Die wichtigsten UUID-Versionen im Vergleich

Es existieren verschiedene standardisierte Verfahren (Versionen) zur Generierung einer UUID. Jede Version eignet sich für andere Anwendungsbereiche.

UUID Version 1 (Zeitbasiert)

Nutzt die aktuelle Systemzeit (in 100-Nanosekunden-Intervallen) und die MAC-Adresse der Netzwerkkarte des generierenden Rechners.

  • Vorteil: Zeitlich sortierbar.
  • Nachteil: Datenschutzkritisch, da die MAC-Adresse Rückschlüsse auf die Hardware zulässt und die UUIDs zurückverfolgt werden können.

UUID Version 4 (Vollständig zufällig)

Diese Version wird heute in Softwareanwendungen am häufigsten eingesetzt. Sie besteht, bis auf die Versions- und Varianten-Bits, vollständig aus kryptografischen Zufallszahlen.

  • Vorteil: Maximale Anonymität, extrem einfach zu generieren.
  • Nachteil: Absolut zufällige Verteilung. In Datenbanken führt dies zu schweren Performance-Einbussen bei der Indizierung, da neue Datensätze nicht am Ende der Tabelle angehängt, sondern willkürlich in die B-Tree-Struktur eingefügt werden müssen (Index-Fragmentierung).

UUID Version 5 (Namensbasiert mit SHA-1)

Erzeugt eine UUID deterministisch aus einem Namensraum (z. B. einer Domain) und einer Zeichenkette mittels eines SHA-1-Hashes. Dieselbe Kombination liefert immer dieselbe UUID.

UUID Version 7 (Der moderne Standard: Zeit- und Zufallsbasiert)

UUIDv7 wurde speziell entwickelt, um die Nachteile der Vorgängerversionen zu beheben. Sie nutzt einen Unix-Zeitstempel in Millisekunden für die ersten 48 Bit, gefolgt von 74 Bit Pseudozufall.

  • Vorteil: UUIDv7 ist zeitlich sortierbar (lexikografisch sortierbar). Neue Datensätze werden in der Datenbank sequenziell angehängt. Das löst das Performance-Problem beim Schreiben in Indizes vollständig, während die Eigenschaft der weltweiten Eindeutigkeit erhalten bleibt.

Die UUID-Versionen im direkten Vergleich

Die folgende Tabelle fasst die wichtigsten Versionen mit ihren Eigenschaften und typischen Einsatzgebieten zusammen:

VersionBasisSortierbarDatenschutzTypischer Einsatz
v1Zeit + MAC-Adressejakritisch (MAC)Legacy-Systeme
v4reiner Zufallneingutallgemeine IDs, APIs
v5Namensraum + SHA-1neingutdeterministische IDs
v7Zeit (ms) + ZufalljagutDB-Primärschlüssel (modern)

Merksatz: Für neue Projekte ist v4 der sichere Standard für allgemeine Bezeichner und v7 die erste Wahl, sobald die UUID als Datenbank-Primärschlüssel dient.


Praxisbeispiel: UUIDv4 vs. UUIDv7 als Primärschlüssel

Ein Team migriert eine wachsende PostgreSQL-Tabelle von UUIDv4 auf UUIDv7:

  • Vorher (UUIDv4): Jeder neue Datensatz erhält eine völlig zufällige ID. Die Einträge werden quer durch den B-Tree-Index verteilt eingefügt, was zu ständigen Seitenteilungen (Page Splits) und einem stark fragmentierten Index führt. Mit wachsender Tabelle bricht die Schreibperformance ein.
  • Nachher (UUIDv7): Da die ID mit einem Zeitstempel beginnt, werden neue Datensätze nahezu sequenziell am Ende des Index angehängt – ähnlich wie bei einer klassischen Auto-Increment-ID, aber ohne deren Nachteile (keine erratbaren, fortlaufenden Nummern, dezentrale Erzeugung). Die Schreibgeschwindigkeit bleibt auch bei Millionen Datensätzen stabil.

Die Lehre: Die Wahl der UUID-Version ist keine Formalität, sondern eine Performance-Entscheidung. Wer IDs in der API entgegennimmt, sollte sie zudem stets mit einem regulären Ausdruck auf das korrekte Format prüfen.


Best Practices für den Einsatz von UUIDs

  • Verwenden Sie UUIDv7 für Primärschlüssel: Wenn Sie eine relationale Datenbank (wie PostgreSQL oder MySQL) nutzen, sollten Sie für IDs standardmässig UUIDv7 anstelle von UUIDv4 verwenden.
  • Speichern Sie UUIDs als Binärwert: Viele Entwickler speichern UUIDs fälschlicherweise als Text (VARCHAR mit 36 Zeichen). Dies verbraucht unnötigen Speicherplatz. Speichern Sie UUIDs im nativen uuid-Datentyp der Datenbank oder als binary(16).
  • IDs in Schnittstellen validieren: Wenn Sie UUIDs in Ihrer API entgegennehmen, validieren Sie diese zwingend mit einem regulären Ausdruck (Regex) auf das korrekte Format, um Injektions-Angriffe zu verhindern.

[!TIP] Müssen Sie für Entwicklungs- oder Testzwecke mehrere eindeutige Schlüssel erzeugen oder das Format einer vorhandenen ID validieren? Nutzen Sie den schnellen UUID Generator auf balou.tools zur direkten und sicheren Erzeugung von UUIDs im Browser. Eine Übersicht über weitere praktische Werkzeuge finden Sie in den Developer Tools.

Häufig gestellte Fragen (FAQ)

Wie hoch ist die Wahrscheinlichkeit einer UUID-Kollision?

Bei einer UUID Version 4 ist die Wahrscheinlichkeit einer Kollision (dass zwei zufällig generierte UUIDs identisch sind) verschwindend gering. Selbst wenn man über Jahrzehnte hinweg jede Sekunde eine Milliarde UUIDs generiert, liegt die Wahrscheinlichkeit einer einzigen Kollision nahe bei Null. Die Gesamtzahl möglicher Kombinationen liegt bei 2^122.

Welche UUID-Version eignet sich am besten für Datenbank-Primärschlüssel?

Klassisch wurde UUIDv4 verwendet. Allerdings ist UUIDv4 völlig unstrukturiert (zufällig), was zu einer starken Fragmentierung von Datenbank-Indizes (B-Trees) führt und die Schreibperformance drastisch senkt. Der moderne Standard für Primärschlüssel ist UUID Version 7, da sie zeitlich sortierbar ist.

Was ist der Unterschied zwischen UUID und GUID?

Es gibt keinen technischen Unterschied. GUID (Globally Unique Identifier) ist lediglich die von Microsoft geprägte Bezeichnung für denselben 128-Bit-Standard, der offiziell als UUID (RFC 4122 bzw. RFC 9562) spezifiziert ist. Die Begriffe werden synonym verwendet.

Sollte ich eine UUID als sicheres Geheimnis (z. B. Session-Token) verwenden?

Nur eingeschränkt. Eine UUIDv4 stammt zwar aus einer Zufallsquelle, ist aber als Bezeichner und nicht als kryptografisches Geheimnis konzipiert. Für Sicherheitstoken sollten Sie einen dedizierten, kryptografisch sicheren Zufallsgenerator mit ausreichender Länge nutzen – etwa für Werte, die anschliessend per [Hash](/developer-tools/hash-generator/) gespeichert werden.