Warum Sie GUID/UUID brauchen und warum es einfacher ist, als Sie denken?
\n\nHaben Sie sich jemals gefragt, wie Websites und Anwendungen einen Datensatz in der Datenbank von einem anderen unterscheiden? Oder wie Ihr Browser sich merkt, dass genau Sie etwas in den Warenkorb gelegt haben und nicht der Nachbar? Das Geheimnis liegt oft in einer kleinen, aber mächtigen Zeichenkette – der GUID (Globally Unique Identifier) oder ihrem präziseren Bruder UUID (Universally Unique Identifier).
\n\nAuf Stack Overflow sammelt die Frage „How do I create a GUID / UUID?“ tausende Aufrufe. Das ist kein Zufall. Früher oder später steht jeder Entwickler vor der Aufgabe: „Ich brauche eine eindeutige ID, aber ich möchte keine ganze Bibliothek nachziehen.“ Heute werden wir dieses Thema in JavaScript von A bis Z durchgehen. Sie erfahren nicht nur, wie man eine UUID generiert, sondern auch, welche Methode Sie für Ihre Aufgabe wählen sollten.
\n\nBereit? Los geht‘s!
\n\nWas ist eine UUID eigentlich? (und warum das keine Magie ist)
\n\nBevor wir Code schreiben, klären wir die Theorie. Eine UUID ist eine 128-Bit-Zahl, die üblicherweise im hexadezimalen Format mit Bindestrichen dargestellt wird. Sie sieht so aus:
\n\n123e4567-e89b-12d3-a456-426614174000\n\nDer Standard RFC 4122 beschreibt mehrere Versionen von UUIDs. Die beliebtesten sind:
\n- \n
- Version 4: Zufällige UUID. Fast alles, was Sie im Internet finden, ist diese. \n
- Version 1: Basiert auf Zeit und MAC-Adresse. Veraltet, kommt aber gelegentlich vor. \n
- Version 5: Wird aus einem Namen (z. B. einer URL) mit dem SHA-1-Hash generiert. \n
Die Haupteigenschaft einer UUID ist die Eindeutigkeit ohne zentralen Server. Die Wahrscheinlichkeit einer Kollision (Übereinstimmung zweier IDs) ist so gering, dass man sie vernachlässigen kann. Es heißt, wenn man eine Milliarde UUIDs pro Sekunde generieren würde, würde es etwa 100 Jahre dauern, ein Duplikat zu erzeugen. Eine ziemlich gute Garantie, oder?
\n\nDer korrekteste Weg: crypto.randomUUID()
\n\nWenn Sie modernes JavaScript (ES2020+) schreiben, haben Sie eine integrierte Lösung zur Hand – crypto.randomUUID(). Diese Methode ist in Browsern und Node.js (ab Version 14.17.0) verfügbar.
\n\nSo funktioniert es:
\n\n// Browser\nconst myUUID = crypto.randomUUID();\nconsole.log(myUUID); // Ausgabe: "f47ac10b-58cc-4372-a567-0e02b2c3d479"\n\n// Node.js (moderne Versionen)\nconst { randomUUID } = require('crypto');\nconst myUUID = randomUUID();\nconsole.log(myUUID);\n\nWarum ist das die beste Wahl?
\n- \n
- Sicherheit: Verwendet einen kryptografisch sicheren Zufallszahlengenerator. Keine vorhersagbaren Muster. \n
- Standard: Entspricht strikt RFC 4122 Version 4. \n
- Leistung: In C++ unter der Haube geschrieben, arbeitet blitzschnell. \n
- Null Abhängigkeiten: Keine Notwendigkeit, externe Bibliotheken zu installieren. \n
Wichtig: In älteren Browsern (Internet Explorer, Safari vor 15.4) fehlt diese Methode möglicherweise. Wenn Sie solche „Dinosaurier“ unterstützen, lesen Sie weiter – wir haben Alternativen.
\n\nDer klassische Hack: Math.random() + RFC 4122-Muster
\n\nVor dem Erscheinen von crypto.randomUUID() haben Entwickler eigene Lösungen erfunden. Die beliebteste Variante ist die Verwendung von Math.random(), um Ziffern in das UUID-Muster einzusetzen. Dieser Code geistert seit über 10 Jahren durch das Internet:
\n\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nconsole.log(generateUUID()); // Ausgabe: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"\n\nWie funktioniert das?
\n- \n
- Das Muster
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxgibt das Format vor. \n - Das Zeichen 'x'