UUID Generator
Ein UUID Generator für v4 oder v7, eine oder tausend auf einmal, mit der kryptografischen Zufallsquelle deines eigenen Browsers. Kopier sie in Anführungszeichen, als JSON-Array oder als SQL-Values, damit sie direkt in das passen, was du gerade schreibst.
Kostenlos · Ohne Anmeldung · Läuft komplett in deinem Browser
Erzeugt in deinem Browser mit crypto.getRandomValues, nie auf einem Server – keine ID, die du hier verwendest, hat je deinen Rechner verlassen. Dieser UUID Generator kann neben v4 auch v7, was die meisten nicht können.
5 Zeilen · 184 Zeichen · je 36 Zeichen
Die Wahl des Primary-Key-Typs gehört zu den Entscheidungen, die eine Spec vor der Migration geklärt haben sollte. Verbinde GitHub, und Tekks Loops lesen das echte Repo und bringen dir Proposals, was als Nächstes zu beheben ist; gib eines mit Greenlight frei, und dein Coding-Agent bekommt die Spec.
So funktioniert’s
- 1
Wähl eine Version
v4 sind 122 zufällige Bits und der richtige Standard für alles Öffentliche. v7 legt einen Timestamp in Millisekunden in die vorderen 48 Bits, sodass sich die Werte nach Erstellungszeit sortieren – die Version, die du für einen Primärschlüssel in der Datenbank willst. Nil und Max sind die beiden reservierten Werte aus RFC 9562.
- 2
Wähl, wie viele und in welcher Form
Bis zu tausend auf einmal. Schalter für Großbuchstaben und Bindestriche decken die Systeme ab, die einen nackten String mit 32 Zeichen wollen, und der Ausgabemodus verpackt den Stapel als Strings in Anführungszeichen, als JSON-Array oder als SQL-Value-Tupel. Ein UUID Generator, bei dem du die Ausgabe von Hand umformatieren musst, hat nur die Hälfte erledigt.
- 3
Kopieren oder herunterladen
Kopier den ganzen Stapel oder speicher ihn als Textdatei. Nichts wird auf einem Server erzeugt und nichts übertragen – die Werte kommen aus crypto.getRandomValues in deinem eigenen Tab. Nur so kannst du sicher sein, dass eine Kennung, der du gleich vertraust, nicht auch in irgendjemandes Log steht.
Was die Zeichen bedeuten
Eine UUID hat 128 Bit, geschrieben als 32 Hex-Zeichen in fünf Gruppen:
550e8400-e29b-41d4-a716-446655440000
↑ ↑
| variant
version
Zwei Stellen sind nicht zufällig. Das erste Zeichen der dritten Gruppe ist die Version, und das erste Zeichen der vierten Gruppe kodiert die Variante – bei einer Standard-UUID ist es immer 8, 9, a oder b. Alles andere ist Payload.
Deshalb hat eine v4 122 zufällige Bits statt 128: Sechs davon sind schon vergeben.
v4 und v7
| v4 | v7 | |
|---|---|---|
| Inhalt | 122 zufällige Bits | 48-Bit-Timestamp + 74 zufällige Bits |
| Sortiert nach Erstellung | Nein | Ja |
| Verrät die Erstellungszeit | Nein | Ja |
| Gut als Primärschlüssel | Nein | Ja |
| Gut als öffentliche ID | Ja | Nur wenn die Zeit nicht sensibel ist |
Beide sind in RFC 9562 definiert, veröffentlicht im Mai 2024. Er hat den älteren RFC 4122 abgelöst und v7 sowie die Max-UUID hinzugefügt.
Warum es v7 gibt
Das ist der praktische Grund, sich dafür zu interessieren, und es geht um das Verhalten des Index, nicht um Eindeutigkeit.
Ein v4-Primärschlüssel landet bei jedem Insert an einer zufälligen Stelle im Index. Wächst die Tabelle über den Punkt hinaus, an dem der Index in den Speicher passt, trifft jeder Schreibvorgang eine andere Page, und die Datenbank liest am Ende eine Page von der Platte, um eine Zeile zu schreiben. Fragmentierung folgt, und das Problem wird genau dann schlimmer, wenn die Tabelle wertvoll wird.
Eine v7 beginnt mit einem Timestamp, aufeinanderfolgende Inserts landen also nebeneinander. Die heißen Pages bleiben heiß, und der Index verhält sich wie eine Auto-Increment-Spalte – während die UUID trotzdem clientseitig ohne Roundtrip erzeugt wird, und genau deshalb nimmt man überhaupt eine UUID.
Der Preis: Eine v7 verrät allen, die sie haben, wann die Zeile angelegt wurde, auf die Millisekunde genau. Für einen internen Schlüssel ist das meist in Ordnung und manchmal sogar nützlich. Für eine Kennung in einer URL denk vorher darüber nach.
Reihenfolge innerhalb einer Millisekunde
Erzeugst du tausend v7 in derselben Millisekunde, kann der Timestamp sie nicht unterscheiden. RFC 9562 §6.2 bietet dafür einen eigenen Zähler fester Länge an: Die 12 Bits direkt nach der Version zählen innerhalb der Millisekunde hoch.
Dieses Tool macht genau das, ein Stapel von 500 kommt also schon sortiert heraus. Generatoren, die diese Bits zufällig füllen, liefern Werte, die nur auf die Millisekunde genau sortiert sind – meist in Ordnung, gelegentlich die Ursache eines verwirrenden Tests.
Speicherung
| Darstellung | Größe |
|---|---|
Postgres uuid |
16 Byte |
char(36) als Text |
36 Byte |
char(32) ohne Bindestriche |
32 Byte |
MySQL binary(16) |
16 Byte |
Bei einer Tabelle jeder Größe summiert sich der Unterschied über jeden Index und jeden Foreign Key. Speicher die Bytes; formatier an den Rändern.
Häufige Fragen
- Was ist eine UUID?
- Eine 128-Bit-Kennung, geschrieben als 32 Hexadezimalzeichen in fünf Gruppen mit Bindestrichen. Der Witz ist, dass sie unabhängig und überall erzeugt werden kann, ohne Abstimmung mit einer zentralen Stelle, und in der Praxis trotzdem eindeutig ist.
- Ist ein UUID-GUID-Generator dasselbe?
- Ja. GUID ist Microsofts Name für dieselbe 128-Bit-Kennung, und beide Begriffe werden in allen Ökosystemen austauschbar verwendet – ein UUID Generator und ein GUID-Generator sind also dasselbe Tool unter zwei Namen. Der einzige echte Unterschied, dem du begegnen wirst: Microsoft-Tools setzen den Wert oft in geschweifte Klammern.
- Was ist der Unterschied zwischen UUID v4 und v7?
- v4 ist komplett zufällig. v7 stellt einen 48-Bit-Timestamp in Millisekunden an den Anfang und füllt den Rest mit Zufall, sodass später erzeugte Werte nach früher erzeugten sortiert werden. v4 gibt dir Unvorhersagbarkeit, v7 gibt dir Ordnung – und Ordnung ist das, worauf ein Datenbankindex Wert legt.
- Welche UUID-Version soll ich nehmen?
- v7 für Primärschlüssel und alles, wonach du sortierst oder paginierst. v4 für öffentlich sichtbare Kennungen, bei denen ein eingebetteter Erstellungszeitpunkt mehr verraten würde, als dir lieb ist. Für alles, was User sehen, ist v4 der sicherere Standard; geht es in eine Datenbank und du bist dir unsicher, nimm v7.
- Warum ist v4 schlecht für Primärschlüssel in der Datenbank?
- Weil jeder Wert an einer zufälligen Stelle im Index landet. Inserts verteilen sich über den ganzen B-Tree, statt am Ende angehängt zu werden. Das fragmentiert die Pages und drängt das Working Set aus dem Speicher, je größer die Tabelle wird. v7-Werte sind nahezu sequenziell, Inserts bleiben also lokal, und der Index verhält sich wie eine Auto-Increment-Spalte.
- Sind diese UUIDs wirklich zufällig?
- Sie kommen aus crypto.getRandomValues, der kryptografisch sicheren Zufallsquelle des Browsers – nicht aus Math.random, das vorhersagbar und für Kennungen ungeeignet ist. Dieser UUID Generator läuft komplett clientseitig, die Werte werden also von deinem Rechner erzeugt und nie übertragen.
- Wie wahrscheinlich ist eine Kollision?
- Bei v4 vernachlässigbar, in jeder Größenordnung, der du begegnen wirst. Es gibt 2^122 mögliche Werte, und du müsstest etwa 2,7 × 10^18 davon erzeugen, bevor eine einzige Kollision zu 50 % wahrscheinlich wird. Echte Systeme scheitern aus jedem anderen Grund, lange bevor das zum Thema wird.
- Kann ich die in Produktion verwenden?
- Ja, für Seed-Daten, Fixtures und einmalige Fälle. Für Werte, die deine Anwendung zur Laufzeit erzeugt, ruf die Funktion deiner Plattform auf – crypto.randomUUID() in Browsern und Node, uuid_generate_v4() in Postgres, uuid.New() in Go. Ein Generator wie dieser ist für die Momente, in denen du einen Wert von Hand brauchst, nicht für eine Abhängigkeit in deinem Code-Pfad.
- Wofür ist die Nil-UUID?
- Sie besteht nur aus Nullen und bedeutet „keine UUID“ – ein definierter Platzhalter statt null. RFC 9562 definiert außerdem eine Max-UUID aus lauter Einsen als anderes Ende des Wertebereichs. Keine von beiden trägt eine Version, und gerade deshalb taugen beide als Sentinel-Werte: Sie können nie versehentlich erzeugt werden.
- Soll ich UUIDs als Text oder binär speichern?
- Binär, wo die Datenbank es unterstützt. Postgres hat einen nativen uuid-Typ mit 16 Byte; denselben Wert als String mit 36 Zeichen zu speichern kostet mehr als das Doppelte, plus den Vergleichsaufwand bei jedem Index-Lookup. MySQL hat keinen nativen Typ, dort ist BINARY(16) mit Umwandlung an den Rändern die übliche Lösung.
- Warum sind manche UUIDs in Großbuchstaben?
- RFC 9562 sagt: Kleinbuchstaben ausgeben, bei der Eingabe beides akzeptieren. Großbuchstaben sind eine Microsoft-Konvention, die mit GUIDs kommt. Es ist derselbe Wert, und Vergleiche sollten Groß- und Kleinschreibung ignorieren – den Schalter für Großbuchstaben oben gibt es, weil manche Systeme immer noch darauf bestehen.
- Loggt ihr die UUIDs, die ich erzeuge?
- Nein. Sie werden in deinem Browser erzeugt und nirgendwohin geschickt. Es gibt keinen Server-Aufruf, der geloggt werden könnte, kein Konto und keine Analytics auf den Werten. Trenn die Internetverbindung, und die Seite funktioniert trotzdem – genau diese Eigenschaft zählt, wenn du gleich eine davon als Secret verwenden willst.
- Warum ist das kostenlos, und was ist Tekk?
- Tekk macht dein Produkt zu einem, das sich selbst verbessert: 16 Loops beobachten deine Codebase und bringen dir Proposals, die du mit Greenlight freigibst oder ablehnst, und dein Coding-Agent baut das Ergebnis. Dieses Tool kostet uns im Betrieb nichts, und wer eine Tabelle mit Seed-Daten füllt, gehört genau zu den Leuten, für die wir bauen. Ohne Anmeldung, ohne Limit, kein Upsell im Tool.
Willst du eine echte Spec für das, was du baust?
Schreib einen Satz. Tekk liest deinen Code und schreibt die Spec, die dein Coding-Agent baut – und seine Loops behalten im Blick, was du auslieferst.
Kostenlos testen · GitHub bei der Registrierung verbinden