Skip to main content

UUID Generator

Generate UUID v4 identifiers, single or in bulk.

Geprüft von · Zuletzt geprüft

1 UUID
26822434-9832-483d-b3c8-7d79662b2891

Den UUID-Generator verwenden

  1. Lege die Anzahl der benötigten UUIDs in der Zahleneingabe fest, von 1 bis 100 auf einmal. Für skriptgesteuerte Arbeitslasten generiere 100 auf einmal und füge sie an der benötigten Stelle ein.
  2. Schalte Großbuchstaben um, wenn dein Zielsystem die kanonischen Hexadezimalziffern in A-F statt a-f erwartet. Beide Formen sind gültig gemäß RFC 4122 Abschnitt 3, aber Systeme wählen oft eine.
  3. Klicke auf Generieren. Eine Liste frisch generierter UUID-v4-Zeichenfolgen erscheint unten.
  4. Kopiere einzeln, indem du auf eine beliebige einzelne UUID klickst, oder verwende Alle kopieren, um die gesamte Liste als zeilengetrennte Werte zu erfassen.
  5. Regeneriere so oft wie nötig. Jeder Klick erzeugt einen neuen Satz - es gibt kein Caching, kein Seeding und keine Wiederverwendung.

Was der Generator tatsächlich aufruft

Wenn dein Browser es unterstützt (jede moderne Version seit 2021-2022), ruft der Generator crypto.randomUUID() auf, das von WebCrypto spezifiziert ist, eine UUID der RFC-4122-Version 4 mit kryptografisch hochwertigen zufälligen Bytes aus dem zugrundeliegenden CSPRNG des Betriebssystems zurückzugeben. In älteren Browsern fällt das Werkzeug auf das manuelle Aufbauen der UUID zurück: es ruft crypto.getRandomValues auf, um ein 16-Byte-Uint8Array zu füllen, setzt das Versions-Nibble (Byte 6, hohes Nibble auf 0100) und die Variant-Bits (Byte 8, hohe Bits auf 10) und formatiert das Ergebnis als kanonische xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx-Zeichenfolge. Beide Pfade erfüllen dieselben Entropiegarantien: 122 Bits Zufälligkeit, wobei die verbleibenden 6 Bits für Versions- und Variantmarker reserviert sind. Keine Server-Beteiligung, keine Netzwerkanfrage, kein Analytics-Beacon.

Wann du UUIDs generieren würdest

  • Einen neuen Datensatz in einer verteilten Datenbank befüllen, wo keine zentrale Sequenz existiert - jeder Mikrodienst kann unabhängig IDs prägen.
  • API-Schlüssel oder Magic-Link-Token erstellen, bei denen Unratbarkeit wichtiger ist als Sortierung.
  • Temporäre Dateien in S3 oder R2 benennen, damit gleichzeitige Uploads auch ohne Koordination nie kollidieren.
  • Korrelations-IDs für Protokolle generieren, die mehrere Dienste überspannen - eine UUID im X-Request-ID-Header verbindet sie.
  • Mock-Daten für Test-Fixtures erzeugen, bei denen jede Zeile einen realistisch aussehenden Bezeichner benötigt.
  • Session-Token für eine leichtgewichtige Web-App erstellen, die keine vollständige JWT-Maschinerie benötigt.

Häufige Fallstricke und Randfälle

  • UUID v4 als Primärschlüssel in großen OLTP-Tabellen verwenden. v4 ist zufällig, was B-Baum-Indizes fragmentiert und die Einfüge-Leistung beeinträchtigt. ULID oder UUID v7 (zeitgeordnet) sind besser, wenn du sowohl Einzigartigkeit als auch Index-Lokalität benötigst.
  • UUID-Einzigartigkeit als Sicherheit betrachten. Der Besitz einer UUID sollte nicht Autorisierung bedeuten. Kombiniere immer mit einem signierten Token oder einer Berechtigungsprüfung - UUIDs sind nur Bezeichner, keine Bearer-Credentials.
  • UUID als VARCHAR(36) speichern. Es funktioniert, verschwendet aber 36 Bytes, wenn ein nativer UUID-Typ (16 Bytes binär) verfügbar ist. PostgreSQL hat einen uuid-Spaltentyp; MySQL hat BINARY(16); SQL Server hat uniqueidentifier. Verwende sie.
  • Groß- vs. Kleinbuchstaben. RFC 4122 erklärt beide als gültig, empfiehlt aber Kleinbuchstaben auf der Ausgabe und Groß-/Kleinschreibungsunabhängigkeit auf der Eingabe. Das Mischen von Groß- und Kleinschreibung im selben System ist die klassische Quelle von "UUIDs sehen gleich aus, aber Vergleich schlägt fehl"-Bugs.
  • UUIDs als Zeichenfolgen vergleichen. Zwei Darstellungen können sich durch Groß-/Kleinschreibung, Bindestriche oder geschweifte Klammern (der Microsoft-GUID-Stil {550e...0000}) unterscheiden und dennoch denselben Wert repräsentieren. Parst zu binär, bevor du vergleichst.
  • UUIDs in URLs preisgeben. Das ist normalerweise in Ordnung, weil sie nicht erratbar sind, gibt aber noch den Erstellungszeitstempel (v7) oder Benutzerzahlmuster (sequenzielle Typen) preis. Für wirklich geheime Bezeichner verwende längere zufällige Token.

UUID-Format und Versionen

RFC 4122 (Juli 2005) definiert UUID als 128-Bit-Wert mit 32 Hexadezimalziffern, häufig als fünf Gruppen angezeigt, die durch Bindestriche im Muster 8-4-4-4-12 getrennt sind. Fünf Versionen sind im Original-RFC definiert: v1 kodiert MAC-Adresse und Zeitstempel, v2 ist eine DCE-Security-Variante, v3 ist ein Namespace-Hash mit MD5, v4 ist zufällig, und v5 ist ein Namespace-Hash mit SHA-1. RFC 9562 (Mai 2024) veraltete RFC 4122 und fügte die Versionen 6, 7 und 8 hinzu: v6 ordnet den Zeitstempel von v1 für datenbankfreundliche Sortierung neu, v7 verwendet Unix-Millisekunden plus zufällige Bits für monoton steigende zufällige IDs, und v8 ist eine benutzerdefinierte Version für anwendungsspezifische Kodierungen. v4 bleibt der häufigste Standard, weil er einfach ist und keine Koordination erfordert.

Vergleich mit Alternativen

Auf der Kommandozeile kommt uuidgen auf macOS und den meisten Linux-Distributionen vor und generiert standardmäßig v4 (v1 mit -t). Python hat uuid.uuid4(), Node.js hat crypto.randomUUID(), Postgres hat gen_random_uuid() über pgcrypto oder die eingebaute Funktion seit Version 13. Für zeitgeordnete IDs ist ULID (Universally Unique Lexicographically Sortable Identifier) aus dem ulid-npm-Paket eine beliebte Alternative, die die Erstellungsreihenfolge in Index-Scans bewahrt. Snowflake-IDs (Twitters 64-Bit-Design) und KSUID sind andere zeitgeordnete Optionen. Verwende dieses Web-Werkzeug, wenn du eine oder eine Handvoll UUIDs benötigst, ohne ein Terminal zu öffnen oder Node zu starten - besonders nützlich beim Ausfüllen einer Test-Fixture oder beim Einfügen einer ID in einen Fehlerbericht.

Häufig gestellte Fragen

Was macht eine UUID zu "v4"?

Eine UUID v4 wird fast vollständig mit zufälligen Bytes befüllt, wobei nur zwei Felder fest sind: das Versions-Nibble ist 0100 (binär), was sie als Version 4 kennzeichnet, und die Variant-Bits sind 10, was sie als RFC-4122-Variante kennzeichnet. Das lässt 122 Bits Entropie. Andere Versionen verwenden Zeitstempel, MAC-Adressen oder Namespace-Hashes für spezifische Kompromisse, aber v4 ist die einfachste und die, auf die die Mehrheit der Anwendungen zurückgreift, wenn sie einen zufälligen Bezeichner ohne Koordination benötigt.

Wie unterscheidet sich das von crypto.randomUUID in meinem Node-Skript?

Es ist buchstäblich dieselbe Implementierung. Dein Browser und deine Node-Laufzeitumgebung setzen beide crypto.randomUUID aus der WebCrypto-API ein, die Entropie aus dem CSPRNG auf Betriebssystemebene zieht und das Ergebnis gemäß RFC 4122 Abschnitt 4.4 formatiert. Der einzige Unterschied ist der Kontext - in Node rufst du es von einem Skript aus auf, hier von einer Webseite aus und siehst das Ergebnis in einem Textfeld. UUIDs, die von beiden Pfaden generiert werden, sind austauschbar und nicht voneinander zu unterscheiden.

Kollidieren UUIDs jemals?

Theoretisch ja, in der Praxis nein. Mit 122 zufälligen Bits liegt die Geburtstagsgrenze für eine 50-%-Kollisionswahrscheinlichkeit bei etwa 2^61 generierten UUIDs - ungefähr 2,3 Quintillionen. Bei einer Rate von einer UUID pro Nanosekunde pro Maschine, über alle Computer auf der Erde hinweg, würde der verfügbare Datenbankspicher ausgehen, bevor eine realistische Kollision auftritt. Für jede tatsächliche Anwendung ist die Einzigartigkeit praktisch garantiert, und du musst keine Kollisionsbehandlung einplanen.

Wird die Zufälligkeit auf einem Server generiert?

Nein. crypto.randomUUID läuft in deinem Browser und zieht Entropie aus derselben Betriebssystemquelle (CryptGenRandom auf Windows, /dev/urandom auf Linux, SecRandomCopyBytes auf macOS), die die WebCrypto-API für Verschlüsselungsschlüssel verwendet. Es gibt keinen fetch, keinen WebSocket, keinen API-Aufruf und keine Telemetrie. Du kannst das überprüfen, indem du nach dem Laden der Seite die Netzwerkverbindung deaktivierst - die UUID-Generierung funktioniert weiterhin, weil die Entropiequelle lokal auf deinem Betriebssystem ist.

Ist UUID dasselbe wie GUID?

Ja, mit einem kleinen kosmetischen Vorbehalt. GUID (Globally Unique Identifier) ist Microsofts Name für denselben 128-Bit-Wert, und Microsoft schreibt sie konventionell in geschweifte Klammern wie {550e8400-e29b-41d4-a716-446655440000}. Das Byte-Layout in .NET ist auch Little-Endian für die ersten drei Felder, während RFC 4122 Big-Endian spezifiziert, sodass rohe Byte-Level-Vergleiche zwischen Windows- generierten GUIDs und RFC-UUIDs Sorgfalt erfordern. Auf der Zeichenfolgen- Formularebene sind sie austauschbar.

Wann sollte ich UUID v7 statt v4 verwenden?

Verwende v7, wenn du sowohl globale Einzigartigkeit als auch ungefähre Erstellungszeit-Sortierung benötigst - typischerweise für Primärschlüssel in Tabellen mit hoher Einfügerate, bei denen zufällige v4-Schlüssel Index-Fragmentierung verursachen. Die ersten 48 Bits von v7 sind ein Unix-Millisekunden-Zeitstempel, sodass Einfügungen im B-Baum clustern. Postgres, MySQL und SQLite profitieren alle davon. Der Nachteil ist, dass v7 den Erstellungszeitpunkt preisgibt; wenn Timing sensibel ist (du willst nicht die Benutzeranzahl oder Anmeldegeschwindigkeit preisgeben), bleib bei v4.

Kann ich mehr als 100 auf einmal generieren?

Die Benutzeroberfläche begrenzt auf 100 pro Klick, um die Ausgabe lesbar zu halten. Für Massenarbeitslasten führe die Schleife in deinem eigenen Code aus: node -e "for(let i=0;i<10000;i++) console.log(crypto.randomUUID())" erzeugt 10.000 in einer Sekunde. python -c "import uuid; [print(uuid.uuid4()) for _ in range(10000)]" tut dasselbe. Die Web-Benutzeroberfläche zielt auf interaktive Nutzung; Skripte auf Stapelverarbeitung.

Hat die kanonische Form immer vier Bindestriche im 8-4-4-4-12-Muster?

Kanonisch ja, gemäß RFC 4122. Aber viele Werkzeuge akzeptieren UUIDs ohne Bindestriche (32 Hexadezimalzeichen hintereinander) und kanonisieren sie beim Parsen neu. Manche akzeptieren geschweifte Klammern, manche urn:uuid:-Präfixe. Beim Speichern oder Vergleichen normalisiere auf eine einzige Darstellung - typischerweise die kleingeschriebene Bindesstrich-Form - um falsch-negative Ergebnisse zu vermeiden. Die meisten SQL-Datenbanken und Sprachbibliotheken führen diese Normalisierung automatisch durch, wenn du in einen UUID-Typ parst.

Ist UUID v4 kryptografisch sicher?

Es wird mit einem kryptografischen Zufallszahlengenerator generiert, sodass das Vorhersagen der nächsten UUID aus einer beobachteten Sequenz rechnerisch nicht durchführbar ist. Das macht v4 geeignet für Token, die nicht erratbar sein müssen (Passwort-Reset-Links, Session-IDs für niedrigwertige Sessions, Magic-Link-Bezeichner). Es ist nicht geeignet als einziger Authentifizierungsmechanismus für hochwertige Sessions - kombiniere mit HMAC-signierten Token oder serverseitiger Session-Speicherung für alles Sensible. 122 Bits Zufälligkeit ist stark, aber längere Token (256 Bits) sind Standard für JWT-Secrets und API-Schlüssel.

Wie groß ist der Overhead bei der Verwendung von UUID als Primärschlüssel?

Speicherung: 16 Bytes binär oder 36 Bytes Zeichenfolge, gegenüber 4-8 für eine ganze Zahl. B-Baum-Fragmentierung bei v4-Einfügungen verursacht Schreib-Amplifikation; v7 oder v6 vermeiden dies. Für Postgres verwende den uuid-Typ, nicht VARCHAR(36). Für MySQL verwende BINARY(16) mit einem Helfer zur Darstellung als Zeichenfolge.

Mehr Developer Tools