Zum Inhalt springen

UUIDs erzeugen

Privat – Ihre Datei wird nie gespeichert

Welche Version?

Format
Ihre 0 UUIDs

Ihre 0 UUIDs erscheint hier.

So funktioniert’s

1

Version wählen

v4 für alles, was nicht erratbar sein darf. v7 für Datenbankschlüssel. Der Unterschied wird auf der Seite erklärt, statt vorausgesetzt zu werden.

2

Anzahl wählen

Eine oder bis zu zehntausend auf einmal, mit optionaler Formatierung – Großbuchstaben, geschweifte Klammern, ohne Bindestriche oder als Liste in Anführungszeichen, bereit für Code.

3

Kopieren

Alle kopieren oder als Textdatei herunterladen.

Version 4 oder Version 7 – und warum das in einer Datenbank zählt

Eine UUID besteht aus 128 Bit, geschrieben als 32 Hex-Ziffern in der bekannten Gruppierung 8-4-4-4-12. Sechs dieser Bits geben Version und Variante an, bleiben also 122 Zufallsbits bei Version 4 – genug, dass Sie ein Jahrhundert lang jede Sekunde eine Milliarde erzeugen könnten und es trotzdem überwältigend unwahrscheinlich wäre, dieselbe zweimal zu sehen. Genau das ist der Reiz: Zwei Systeme, die nie miteinander kommuniziert haben, können beide Kennungen erzeugen und sicher davon ausgehen, dass sie nie kollidieren.

Damit das gilt, muss der Zufall echt sein, und hier stammt er aus der kryptografischen Zufallsquelle statt aus einem gewöhnlichen Zufallszahlengenerator. Der Unterschied zählt, wenn Kennungen als Berechtigungsnachweis dienen – ein Link zum Zurücksetzen des Passworts, eine nicht erratbare Freigabe-URL –, denn bei einem vorhersagbaren Generator kann jemand den nächsten Wert aus den vorherigen ableiten. Bei einer kryptografischen Quelle gibt es nichts vorherzusagen.

Version 7 gibt es, weil sich Version 4 als Primärschlüssel einer Datenbank schlecht verhält. Sie stellt einen 48-Bit-Zeitstempel in Millisekunden an den Anfang und füllt den Rest mit Zufall, sodass nacheinander erzeugte UUIDs in der Reihenfolge ihrer Erstellung sortiert sind. Das klingt kosmetisch, ist es aber nicht: Ein zufälliger Schlüssel verteilt jedes Einfügen über den gesamten Index, sodass jeder Schreibvorgang eine andere Seite berührt und der Cache nicht mehr hilft, während ein zeitlich geordneter Schlüssel an einem Ende anhängt. Bei einer großen Tabelle ist der Unterschied im Einfügedurchsatz erheblich – und genau deshalb wurde v7 standardisiert.

Der Kompromiss ist real und will abgewogen sein. Eine UUID der Version 7 verrät jedem, der sie sieht, ungefähr, wann sie erzeugt wurde – auf die Millisekunde –, und eine Reihe davon zeigt, wie schnell Sie Datensätze anlegen. Für einen internen Schlüssel ist das unproblematisch. Für eine Kennung, die in einer URL sichtbar ist – eine Bestellnummer, ein Dokumentlink, eine Benutzer-ID –, ist es ein kleines Informationsleck, das Version 4 nicht hat. Wenn beides zählt: v7 für den Primärschlüssel, v4 für alles Öffentliche.

Wenn Sie etwas anderes brauchen

Erzeugen Sie sie dort, wo sie verwendet werden. Jede Datenbank und jede Sprache hat das eingebaut – gen_random_uuid() in PostgreSQL, UUID() in MySQL, crypto.randomUUID() in JavaScript, uuid.uuid4() in Python –, und einen Stapel im Browser zu erzeugen und in Code einzufügen, ist für ein Fixture oder einen Test in Ordnung und für alles, was produktiv läuft, falsch.

Wenn der Grund für v7 sortierbare Schlüssel sind, gibt es Alternativen, die man kennen sollte. ULID kodiert dieselbe Idee in 26 Zeichen, die kürzer sind und nicht zwischen Groß- und Kleinschreibung unterscheiden; Snowflake-Kennungen passen in 64 Bit und halbieren damit die Indexgröße gegenüber den 128 Bit einer UUID. Und in vielen Datenbanken ist eine gewöhnliche automatisch hochzählende Ganzzahl immer noch schneller und kleiner als all diese – UUIDs lohnen ihren Preis, wenn Kennungen an mehreren Stellen gleichzeitig erzeugt werden müssen, sonst nicht.

Häufig gestellte Fragen

v4 oder v7 – welche brauche ich?

Für einen Primärschlüssel in der Datenbank v7. Wenn sie unmöglich zu erraten sein muss – ein Link zum Zurücksetzen des Passworts, ein Einladungscode, eine Session-Kennung – v4. Das ist die ganze Entscheidung, und die meisten erfahren nie, dass es eine gab, weil fast jeder Generator nur v4 anbietet.

Warum ist v4 als Datenbankschlüssel schlecht?

Weil sie völlig zufällig ist und ein Datenbankindex sortiert ist. Neue zufällige Schlüssel landen an zufälligen Stellen im Index, sodass jedes Einfügen eine andere Seite berührt, der Cache nicht mehr hilft und der Index fragmentiert und wächst. Bei einer großen, stark genutzten Tabelle ist das eine messbare Verlangsamung, die mit der Zeit schlimmer wird. Das ist keine theoretische Sorge – genau deshalb behandeln inzwischen sowohl die Postgres- als auch die MySQL-Dokumentation das Thema.

Was ist UUID v7?

Eine UUID, deren erste 48 Bit ein Zeitstempel in Millisekunden sind, gefolgt von Zufall. Sie ist weiterhin global eindeutig und weiterhin 128 Bit lang, aber weil die Zeit vorne steht, sortieren sich v7-UUIDs in der Reihenfolge ihrer Erstellung. Neue Schlüssel werden am Ende des Index angehängt, statt sich darüber zu verteilen – genau wie bei einer automatisch hochzählenden Ganzzahl, nur mit der Eindeutigkeit einer UUID. Sie wurde 2024 in RFC 9562 standardisiert und ist die aktuelle Empfehlung für neue Tabellen.

Sind die v7-UUIDs hier wirklich sortiert?

Ja, auch innerhalb derselben Millisekunde – und genau das machen die meisten Implementierungen falsch. Ein Zeitstempel hat nur Millisekunden-Auflösung, daher ist eine Schleife, die tausend IDs erzeugt, innerhalb einer einzigen fertig – und mit rein zufälligen niederwertigen Bits sortieren sich diese tausend NICHT in der Reihenfolge ihrer Erzeugung. Dieser Generator verwendet den in RFC 9562 beschriebenen monotonen Zähler, sodass ein Stapel jedes Mal streng aufsteigend ist. Erzeugen Sie tausend und sortieren Sie sie; sie kommen in der Reihenfolge ihrer Erstellung zurück.

Kann ich eine v7-UUID öffentlich zeigen?

Mit einer Einschränkung: Sie verrät konstruktionsbedingt, wann sie erzeugt wurde, auf die Millisekunde. Für einen Datenbankschlüssel ist das meist harmlos oder sogar nützlich. Ist der Erstellungszeitpunkt selbst aber sensibel oder muss die Kennung nicht erratbar sein, verwenden Sie v4 – v7 hat zwar immer noch 74 Zufallsbits, was sehr viel ist, aber ihr Zeitstempel ist für jeden, der die ID hat, klar lesbar.

Sind sie zufällig genug, um sicher zu sein?

Ja. Der Zufall stammt aus `crypto.getRandomValues`, dem kryptografisch sicheren Generator des Browsers, nie aus `Math.random`. Dieser Unterschied hat schon echte Sicherheitslücken verursacht: `Math.random` ist schnell, aber vorhersagbar, und darauf aufgebaute Session-Tokens wurden in der Praxis erraten. Eine v4-UUID hat 122 Zufallsbits – genug, dass Kollisionen praktisch keine Rolle spielen.

Werden sie auf meinem Gerät erzeugt?

Ja, vollständig – und bei Kennungen zählt das. Eine UUID, die vom Server eines anderen abgerufen wird, ist eine UUID, die jemand anderes gesehen hat – was den Zweck verfehlt, wenn Sie ein Geheimnis erzeugen. Diese hier verlassen nie Ihren Browser. Schalten Sie nach dem Laden der Seite Ihr WLAN aus, und alles funktioniert genauso. Das ist der einfachste Weg, die Datenschutzaussage selbst zu überprüfen, statt uns einfach beim Wort zu nehmen.

Was ist die Nil-UUID?

Nur Nullen: 00000000-0000-0000-0000-000000000000. Sie ist eine gültige, reservierte UUID und bedeutet „keine“ oder „nicht gesetzt“, wo null nicht möglich ist. Ihr Gegenstück, die Max-UUID aus lauter f, dient manchmal als Sortier-Endmarke. Beide werden hier angeboten, weil man sie gelegentlich braucht und sie sich nur umständlich fehlerfrei tippen lassen.

Gut zu wissen: UUIDs der Version 4 stammen aus der kryptografischen Zufallsquelle des Browsers, nicht aus Math.random, und lassen sich daher bedenkenlos als Kennungen verwenden. Version 7 enthält einen Zeitstempel in Millisekunden – das macht sie gut sortierbar, verrät aber auch ungefähr, wann sie erzeugt wurde. Verwenden Sie v7 nicht, wo das eine Rolle spielt.

Dieses Tool auf Ihrer Website einbinden

Kostenlos für jeden Blog, jede Kursseite und jeden Hilfeartikel. Fügen Sie ein einziges Snippet ein, und Ihre Besucher können das Tool direkt auf Ihrer Seite nutzen.