Naar inhoud springen

Gratis UUID-generator - Maak V1 & V4 UUID's Direct aan

Genereer unieke identificatoren direct met onze gratis UUID-generator. Maak Version 1 (tijdgebaseerd) en Version 4 (willekeurige) UUID's voor databases, API's en gedistribueerde systemen.

UUID-generator

UUID-versie
Gegenereerde UUID
Laadcalculator...
📚

Documentatie

UUID-generator

Een UUID-generator is een hulpmiddel dat een Universally Unique Identifier, of UUID, maakt: een code van 128 bits die wordt gebruikt om een gegeven te labelen, zodat vrijwel geen ander item waar ook ter wereld waarschijnlijk hetzelfde label heeft. Deze pagina genereert UUID's van versie 1 (op tijd gebaseerd) en versie 4 (willekeurig).

Wat is een UUID?

Een UUID is een getal van 128 bits, geschreven als 32 hexadecimale cijfers (de tekens 0–9 en a-f). Het wordt opgesplitst in vijf groepen die door koppeltekens worden gescheiden, volgens het patroon 8-4-4-4-12, met in totaal 36 tekens. Een voorbeeld van een UUID ziet er als volgt uit:

1550e8400-e29b-41d4-a716-446655440000
2

UUID's worden gedefinieerd door RFC 9562, gepubliceerd door de Internet Engineering Task Force in mei 2024. Deze RFC verving de oudere RFC 4122 uit 2005. Beide documenten beschrijven hetzelfde formaat van 128 bits. Software gebruikt UUID's om rijen in databases, bestanden, gebruikerssessies en andere records te identificeren zonder dat een centrale instantie nummers hoeft uit te delen. Omdat de ruimte van mogelijke UUID's zo groot is, kunnen twee computers onafhankelijk en op hetzelfde moment UUID's genereren zonder vrijwel ooit dezelfde UUID te maken.

UUID-indeling en -structuur

De 128 bits van een UUID worden opgesplitst in benoemde velden. Elk veld neemt een vast aantal bits in beslag:

  • time_low - 32 bits
  • time_mid - 16 bits
  • time_hi_and_version - 16 bits
  • clock_seq_hi_and_reserved - 8 bits
  • clock_seq_low - 8 bits
  • node - 48 bits
Indeling van UUID-velden time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Vier bits in time_hi_and_version bevatten het versienummer van de UUID. Twee bits in clock_seq_hi_and_reserved bevatten de variant, die software vertelt hoe de overige velden moeten worden gelezen. Er zijn acht versies gedefinieerd.

De bovenstaande veldnamen komen uit versie 1, waarin ze daadwerkelijk een tijdstip en een nodewaarde bevatten. Andere versies behouden dezelfde indeling 8-4-4-4-12 en dezelfde veldgrenzen, maar vullen de meeste bits met willekeurige gegevens. In een UUID van versie 4 is de groep met het label time_low willekeurig en geen tijd.

Een UUID genereren met dit hulpmiddel

  1. Kies een versie: versie 1 (op tijd gebaseerd) of versie 4 (willekeurig).
  2. Lees de UUID af in het resultaatvak. Er verschijnt een nieuwe UUID zodra de pagina wordt geladen of de versie verandert.
  3. Selecteer ‘Genereren’ voor een nieuwe UUID.
  4. Selecteer ‘Kopiëren’ om het resultaat naar het klembord te kopiëren en plak het vervolgens in code, een database of een configuratiebestand.

Het paneel onder het resultaat splitst de UUID op in de vijf velden en benoemt elk veld, zodat het versiecijfer en het variantcijfer gemakkelijk te vinden zijn.

Versie 4 is geschikt voor de meeste toepassingen, waaronder databasesleutels en sessietokens, omdat deze geen informatie bevat over wanneer of waar de UUID is gemaakt. Versie 1 is geschikt voor records waarvan de aanmaaktijd uit de identifier zelf moet kunnen worden teruggewonnen, zoals logboekvermeldingen.

UUID-versie 1 versus versie 4

Versie 1 codeert het huidige tijdstip, plus een willekeurig gekozen klokreeks en nodewaarde. De standaard staat toe dat de nodewaarde het echte netwerkadres (MAC-adres) van een computer is, maar ook een willekeurig gegenereerde nodewaarde als alternatief ter bescherming van de privacy. Dit hulpmiddel gebruikt altijd de willekeurige optie: UUID's van versie 1 lezen nooit een echt MAC-adres uit en stellen het nooit bloot. De standaard vereist ook dat de laagste bit van de eerste byte van het nodeveld op 1 wordt gezet bij een willekeurige nodewaarde; dit hulpmiddel doet dat. Echte netwerkkaarten hebben die bit nooit ingesteld, zodat een willekeurige nodewaarde nooit voor een echte kan worden aangezien. Daarom is het tweede hexadecimale cijfer van de vijfde groep in een UUID van versie 1 van deze pagina altijd oneven: 1, 3, 5, 7, 9, b, d of f.

Het tijdstip in een UUID van versie 1 kan worden teruggelezen, zodat records op aanmaaktijd kunnen worden geordend. Het sorteren van de UUID-tekst zelf doet dat niet, omdat de eerste groep de laagste 32 bits van het tijdstip bevat; deze lopen ongeveer elke 7 minuten opnieuw rond. Versie 6, toegevoegd in RFC 9562, slaat hetzelfde tijdstip op met de hoogste bits eerst, zodat sorteren als gewone tekst werkt.

Versie 4 bestaat uit willekeurige bits, met enkele vaste bits om de versie en variant aan te geven. De UUID bevat geen tijdstip en geen machinegebonden gegevens en onthult dus niets over wanneer of waar zij is gemaakt. Sorteren op aanmaaktijd is niet mogelijk.

Er bestaan nog zes andere versies in de standaard, maar deze worden niet door dit hulpmiddel gegenereerd: versie 2 (DCE Security, zelden gebruikt); versies 3 en 5, die worden gemaakt door een naamruimte en een naam te hashen met MD5 of SHA-1, zodat dezelfde invoer altijd dezelfde UUID oplevert; en versies 6, 7 en 8, die door RFC 9562 in (24.300 cm) 2024 zijn toegevoegd voor sorteerbare en aangepaste identifiers.

Een UUID berekenen (formule)

Versie 4:

  1. Genereer 128 willekeurige bits.
  2. Stel de vier versiebits, het eerste hexadecimale cijfer van de derde groep, in op 0100 (hex 4).
  3. Stel de twee hoogste bits van de vierde groep in op 10 (zodat het eerste hexadecimale cijfer van die groep 8, 9, a of b is).

Slechts 122 van de 128 bits zijn daadwerkelijk willekeurig, omdat 6 bits door stappen 2 en 3 vastliggen. Dat geeft 2^122, oftewel ongeveer 5,3 × 10^36, mogelijke UUID's van versie 4.

Versie 1:

  1. Neem de huidige tijd als een aantal intervallen van 100 nanoseconden sinds 15 oktober 1582, de datum van de hervorming van de Gregoriaanse kalender. In de praktijk is dat de gewone Unix-tijd in milliseconden plus 12.219.292.800.000, alles vermenigvuldigd met 10.000.
  2. Splits die telling van 60 bits op over drie velden: de laagste 32 bits komen in time_low, de volgende 16 in time_mid en de hoogste 12 in time_hi_and_version.
  3. Genereer een klokreeks van 14 bits, die wordt gebruikt om botsingen te voorkomen als de systeemklok achteruit wordt gezet.
  4. Genereer een nodewaarde van 48 bits en zet de laagste bit van de eerste byte op 1.
  5. Stel de versiebits in op 0001 en de variantbits op 10.

Over alle UUID-versies samen bevat de volledige ruimte van 128 bits 2^128, oftewel ongeveer 3,4 × 10^38, mogelijke waarden. Dat aantal is zo groot dat willekeurige botsingen in de praktijk geen probleem vormen.

Uitgewerkt voorbeeld

Een UUID van versie 4 lezen. Neem het eerder gegeven voorbeeld: 550e8400-e29b-41d4-a716-446655440000.

  • Derde groep, 41d4: het eerste cijfer is 4 en geeft aan dat dit een UUID van versie 4 is.
  • Vierde groep, a716: het eerste cijfer, a (binair 1010), begint met 10, de vereiste variantbits.
  • De overige hexadecimale cijfers vormen de willekeurige lading.

Een programma dat deze UUID leest, controleert het patroon 4 en 10 om de indeling te bevestigen en behandelt de rest als een ondoorzichtige willekeurige waarde.

Een UUID van versie 1 opbouwen. Stel dat de klok 1.700.000.000.000 milliseconden Unix-tijd aangeeft, oftewel 14 november 2023, 22:13:20 UTC.

  1. Tel de verschuiving op: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Vermenigvuldig met 10.000 voor intervallen van 100 nanoseconden: 139,192,928,000,000,000. In hexadecimale notatie is dat 01EE833B04AFC000.
  3. Splits de waarde op: time_low = 04AFC000 (de laagste 8 hexadecimale cijfers), time_mid = 833B (de volgende 4) en de hoogste 12 bits zijn 1EE.
  4. Plaats het versiecijfer 1 voor 1EE, wat time_hi_and_version = 11EE oplevert.

De UUID luidt dan 04afc000-833b-11ee-, gevolgd door de klokreeks en de nodewaarde. Software kan deze vier stappen omkeren om 14 november 2023 uit de identifier terug te winnen.

Veelvoorkomende toepassingen van UUID's

  • Primaire sleutels in databases, vooral wanneer meerdere servers tegelijk records maken zonder elkaar te raadplegen.
  • Sessietokens en API-sleutels, meestal van versie 4 vanwege de geboden privacy.
  • Identifiers voor bestanden, gebeurtenissen en bronnen in gedistribueerde systemen, zoals microservices.
  • Apparaat-ID's in grote IoT-netwerken, waarbij elk apparaat zijn eigen ID offline kan genereren.

De belangrijkste afweging is de omvang: een UUID neemt 16 bytes opslagruimte in beslag, tegenover 4 of 8 bytes voor een eenvoudige integer-teller, en sommige databases indexeren UUID's langzamer dan opeenvolgende integers.

Alternatieven voor UUID's

Auto-incrementerende integers zijn kleiner en eenvoudiger, maar werken minder goed zodra meer dan één server onafhankelijk ID's moet uitdelen. Snowflake-ID's, ontwikkeld bij Twitter, combineren een tijdstip met een worker-ID om compacte, sorteerbare identifiers in een gedistribueerd systeem te produceren. ULID's (Universally Unique Lexicographically Sortable Identifiers) zijn een nieuwer formaat dat zowel willekeurig als op aanmaaktijd sorteerbaar is, in tegenstelling tot een UUID van versie 4.

Geschiedenis van de UUID-standaard

Het UUID-concept ontstond in de jaren 1980 bij Apollo Computer, als onderdeel van het Network Computing System. De Open Software Foundation nam het formaat later over voor haar Distributed Computing Environment. De Internet Engineering Task Force publiceerde RFC 4122 in (10.500 cm) 2005 en verving deze in mei 2024 door RFC 9562. RFC 9562 houdt elke eerdere versie ongewijzigd werkend en voegt versies 6, 7 en 8 toe.

Veelgestelde vragen

Waarvoor wordt een UUID-generator gebruikt? De generator maakt unieke identifiers voor databases, gedistribueerde systemen, sessietokens, API-sleutels en apparaat-ID's, zodat geen twee records dezelfde identifier hoeven te delen.

Wat is het verschil tussen UUID v1 en v4? Versie 1 codeert een tijdstip dat software kan teruglezen om de aanmaaktijd te bepalen. Versie 4 is volledig willekeurig en bevat geen tijdstip. De uitvoer van versie 1 van dit hulpmiddel gebruikt een willekeurig gegenereerde nodewaarde in plaats van een echt MAC-adres en onthult dus ook geen machine-identificerende informatie.

Onthult versie 1 mijn MAC-adres? Niet met dit hulpmiddel. De standaard staat toe dat het nodeveld van een UUID van versie 1 een echt MAC-adres bevat, maar deze generator vult dat veld altijd met willekeurige bits en zet de bit die aangeeft dat de waarde geen echt netwerkadres is.

Zijn UUID's gegarandeerd uniek? Nee. Geen enkel identifierschema kan absolute uniciteit garanderen, maar de ruimte van 128 bits bevat ongeveer 3,4 × 10^38 mogelijke waarden en een UUID van versie 4 heeft ongeveer 5,3 × 10^36 mogelijke willekeurige waarden. De kans op een duplicaat is voor vrijwel elk praktisch gebruik klein genoeg om te verwaarlozen.

Kan ik een UUID als primaire databasesleutel gebruiken? Ja. UUID's werken goed als primaire sleutels in gedistribueerde systemen, omdat elke node er een kan genereren zonder een centrale server te raadplegen. De kosten zijn 16 bytes opslagruimte per sleutel, meer dan bij een gebruikelijke integer, en mogelijk tragere indexprestaties bij zeer grote tabellen.

Is een UUID hetzelfde als een GUID? Ja. GUID (Globally Unique Identifier) is de naam van Microsoft voor hetzelfde concept dat door RFC 4122 als UUID wordt gedefinieerd.

Kunnen UUID's van versie 4 op aanmaaktijd worden gesorteerd? Nee. UUID's van versie 4 zijn willekeurig en bevatten dus geen informatie over wanneer ze zijn gemaakt. Een UUID van versie 1 bevat die informatie wel, maar moet eerst worden gedecodeerd; het sorteren van de tekst levert geen aanmaakvolgorde op. Versie 6, versie 7 en ULID's zijn ontworpen om rechtstreeks als tekst te worden gesorteerd.

Referenties

  1. Davis, K., Peabody, B. & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Universally unique identifier. In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. GitHub. https://github.com/ulid/spec