Spring til indhold

Gratis UUID-generator - Opret V1 & V4 UUID'er Øjeblikkeligt

Generer entydige identifikatorer øjeblikkeligt med vores gratis UUID-generator. Opret Version 1 (tidsbaseret) og Version 4 (tilfældig) UUID'er til databaser, API'er og distribuerede systemer.

UUID Generator

UUID Version
Genereret UUID
Indlæsningsberegner...
📚

Dokumentation

UUID-generator

En UUID-generator er et værktøj, der opretter en universelt unik identifikator eller UUID: en kode på 128 bit, der bruges til at mærke et stykke data, så det er meget usandsynligt, at noget andet element nogetsteds har samme mærke. Denne side genererer UUID'er af version 1 (tidsbaserede) og version 4 (tilfældige).

Hvad er en UUID?

En UUID er et tal på 128 bit, skrevet som 32 hexadecimale cifre (tegnene 0–9 og a-f). Det er opdelt i fem grupper adskilt af bindestreger efter mønsteret 8-4-4-4-12, altså 36 tegn i alt. En UUID-eksempel ser sådan ud:

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

UUID'er er defineret af RFC 9562, der blev udgivet af Internet Engineering Task Force i maj 2024 og erstattede den ældre RFC 4122 fra 2005. Begge dokumenter beskriver det samme format på 128 bit. Software bruger dem til at identificere rækker i databaser, filer, brugersessioner og andre poster uden behov for en central instans, der udsteder numre. Da mængden af mulige UUID'er er så stor, kan to computere generere UUID'er uafhængigt af hinanden på samme tidspunkt og næsten aldrig få den samme.

UUID-format og -struktur

De 128 bit i en UUID er opdelt i navngivne felter. Hvert felt optager et fast antal bit:

  • time_low – 32 bit
  • time_mid – 16 bit
  • time_hi_and_version – 16 bit
  • clock_seq_hi_and_reserved – 8 bit
  • clock_seq_low – 8 bit
  • node – 48 bit
UUID-feltlayout 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

Fire bit i time_hi_and_version indeholder UUID'ens versionsnummer, og to bit i clock_seq_hi_and_reserved indeholder varianten, som fortæller softwaren, hvordan resten af felterne skal læses. Der er defineret otte versioner.

Feltnavnene ovenfor stammer fra version 1, hvor de faktisk indeholder en tidsværdi og en nodeværdi. Andre versioner bevarer samme layout 8-4-4-4-12 og de samme feltgrænser, men udfylder de fleste bit med tilfældige data. I en UUID af version 4 er gruppen mærket time_low tilfældig og indeholder ikke et tidspunkt.

Sådan genererer du en UUID med dette værktøj

  1. Vælg en version: version 1 (tidsbaseret) eller version 4 (tilfældig).
  2. Læs UUID'en i resultatfeltet. En ny UUID vises, så snart siden indlæses, eller versionen ændres.
  3. Vælg "Generér" for at få en ny.
  4. Vælg "Kopiér" for at kopiere resultatet til udklipsholderen, og indsæt det derefter i kode, en database eller en konfigurationsfil.

Panelet under resultatet opdeler UUID'en i dens fem felter og navngiver hvert felt, så versionscifret og variantcifret er nemme at finde.

Version 4 egner sig til de fleste formål, herunder databasenøgler og sessionstokens, fordi den ikke indeholder oplysninger om, hvornår eller hvor den blev oprettet. Version 1 egner sig til poster, hvor oprettelsestidspunktet skal kunne udledes af selve identifikatoren, f.eks. logposter.

UUID-version 1 kontra version 4

Version 1 koder det aktuelle tidsstempel samt en tilfældigt valgt klokkesekvens og nodeværdi. Standarden tillader, at nodeværdien er en computers rigtige netværksadresse (MAC-adresse), men den tillader også en tilfældigt genereret nodeværdi som et alternativ, der beskytter privatlivet. Dette værktøj bruger altid den tilfældige mulighed: dets UUID'er af version 1 læser eller afslører aldrig en rigtig MAC-adresse. Standarden kræver også, at den laveste bit i den første byte i nodefeltet sættes til 1 for en tilfældig nodeværdi, og dette værktøj sætter den. Rigtige netværkskort har aldrig denne bit sat, så en tilfældig node kan aldrig forveksles med en rigtig. Derfor er det andet hexadecimale ciffer i den femte gruppe altid ulige i en UUID af version 1 fra denne side: 1, 3, 5, 7, 9, b, d eller f.

Tidsstemplet i en UUID af version 1 kan læses igen, så poster kan sorteres efter oprettelsestidspunkt. Sortering af selve UUID-teksten gør ikke dette, fordi den første gruppe indeholder de laveste 32 bit af tidsstemplet, som går i ring cirka hvert 7 minut. Version 6, der blev tilføjet i RFC 9562, gemmer det samme tidsstempel med de højeste bit først, så almindelig tekstsortering fungerer.

Version 4 er opbygget af tilfældige bit, hvor nogle få bit er fastlagt for at markere version og variant. Den indeholder intet tidsstempel og ingen maskinspecifikke data og afslører derfor ikke, hvornår eller hvor den blev oprettet. Den kan ikke sorteres efter oprettelsestidspunkt.

Der findes seks andre versioner i standarden, men dette værktøj genererer dem ikke: version 2 (DCE Security, sjældent brugt); version 3 og version 5, der opbygges ved at hashe et navnerum og et navn med MD5 eller SHA-1, så det samme input altid giver den samme UUID; samt versionerne 6, 7 og 8, der blev tilføjet af RFC 9562 i (24.300 cm) 2024 til sorterbare og tilpassede identifikatorer.

Sådan beregnes en UUID (formel)

Version 4:

  1. Generér 128 tilfældige bit.
  2. Sæt de fire versionsbit, det første hexadecimale ciffer i den tredje gruppe, til 0100 (hex 4).
  3. Sæt de to øverste bit i den fjerde gruppe til 10 (så det første hexadecimale ciffer i gruppen er 8, 9, a eller b).

Kun 122 af de 128 bit er faktisk tilfældige, eftersom 6 bit fastlægges af trin 2 og 3. Det giver 2^122 eller cirka 5,3 × 10^36 mulige UUID'er af version 4.

Version 1:

  1. Brug det aktuelle klokkeslæt som et antal intervaller på 100 nanosekunder siden 15. oktober 1582, datoen for reformen af den gregorianske kalender. I praksis er det almindelig Unix-tid i millisekunder plus 12.219.292.800.000, alt sammen ganget med 10.000.
  2. Opdel denne tælling på 60 bit i tre felter: de laveste 32 bit placeres i time_low, de næste 16 i time_mid og de øverste 12 i time_hi_and_version.
  3. Generér en klokkesekvens på 14 bit, som bruges til at undgå sammenfald, hvis systemuret stilles tilbage.
  4. Generér en nodeværdi på 48 bit, hvor den laveste bit i den første byte sættes til 1.
  5. Sæt versionsbittene til 0001 og variantbittene til 10.

På tværs af alle UUID-versioner rummer hele området på 128 bit 2^128 eller cirka 3,4 × 10^38 mulige værdier. Tallet er så stort, at tilfældige sammenfald ikke er et praktisk problem.

Regneeksempel

Læsning af en UUID af version 4. Brug eksemplet fra tidligere: 550e8400-e29b-41d4-a716-446655440000.

  • Tredje gruppe, 41d4: Det første ciffer er 4, hvilket markerer den som en UUID af version 4.
  • Fjerde gruppe, a716: Det første ciffer, a (binært 1010), begynder med 10, som er de krævede variantbit.
  • De resterende hexadecimale cifre er den tilfældige nyttelast.

Et program, der læser denne UUID, kontrollerer mønstrene 4 og 10 for at bekræfte formatet og behandler derefter resten som en tilfældig, ufortolket værdi.

Oprettelse af en UUID af version 1. Antag, at uret viser 1.700.000.000.000 millisekunder Unix-tid, hvilket er 14. november 2023, 22:13:20 UTC.

  1. Læg forskydningen til: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Gang med 10.000 for at få intervaller på 100 nanosekunder: 139,192,928,000,000,000. I hexadecimal form er det 01EE833B04AFC000.
  3. Opdel det: time_low = 04AFC000 (de laveste 8 hexadecimale cifre), time_mid = 833B (de næste 4), og de øverste 12 bit er 1EE.
  4. Sæt versionscifret 1 foran 1EE, hvilket giver time_hi_and_version = 11EE.

UUID'en bliver derefter 04afc000-833b-11ee- efterfulgt af klokkesekvensen og nodeværdien. Software kan udføre disse fire trin i omvendt rækkefølge for at gendanne 14. november 2023 fra identifikatoren.

Almindelige anvendelser af UUID'er

  • Primærnøgler i databaser, især når flere servere opretter poster samtidig uden at koordinere med hinanden.
  • Sessionstokens og API-nøgler, som regel version 4 på grund af den privatlivsbeskyttelse, den giver.
  • Identifikatorer for filer, hændelser og ressourcer i distribuerede systemer som mikrotjenester.
  • Enheds-id'er i store IoT-netværk, hvor hver enhed kan generere sit eget id offline.

Den vigtigste ulempe er størrelsen: en UUID kræver 16 bytes lagerplads sammenlignet med 4 eller 8 bytes for en simpel heltalstæller, og nogle databaser indekserer UUID'er langsommere end sekventielle heltal.

Alternativer til UUID'er

Selvinkrementerende heltal er mindre og enklere, men fungerer dårligt, når mere end én server skal udstede id'er uafhængigt. Snowflake-id'er, der blev udviklet hos Twitter, kombinerer et tidsstempel med et worker-id for at skabe kompakte, sorterbare identifikatorer i et distribueret system. ULID'er (universelt unikke leksikografisk sorterbare identifikatorer) er et nyere format, der er udviklet til både at være tilfældigt og sorterbart efter oprettelsestidspunkt, modsat en UUID af standardversion 4.

UUID-standardens historie

UUID-konceptet begyndte i 1980'erne hos Apollo Computer som en del af deres Network Computing System. Open Software Foundation overtog senere formatet til deres Distributed Computing Environment. Internet Engineering Task Force udgav RFC 4122 i (10.500 cm) 2005 og erstattede den med RFC 9562 i maj 2024. RFC 9562 bevarer alle tidligere versioner uændret og tilføjer versionerne 6, 7 og 8.

Ofte stillede spørgsmål

Hvad bruges en UUID-generator til? Den opretter unikke identifikatorer til databaser, distribuerede systemer, sessionstokens, API-nøgler og enheds-id'er, så ingen to poster behøver at dele den samme identifikator.

Hvad er forskellen på UUID v1 og v4? Version 1 koder et tidsstempel, som software kan læse igen for at gendanne oprettelsestidspunktet. Version 4 er fuldstændig tilfældig og indeholder intet tidsstempel. Dette værktøjs output af version 1 bruger en tilfældigt genereret nodeværdi i stedet for en rigtig MAC-adresse, så det afslører heller ingen maskinidentificerende oplysninger.

Afslører version 1 min MAC-adresse? Ikke med dette værktøj. Standarden tillader, at nodefeltet i en UUID af version 1 indeholder en rigtig MAC-adresse, men denne generator udfylder altid feltet med tilfældige bit og sætter den bit, der markerer værdien som ikke værende en rigtig netværksadresse.

Er UUID'er garanteret unikke? Nej. Ingen identifikationsordning kan garantere absolut unikhed, men området på 128 bit rummer cirka 3,4 × 10^38 mulige værdier, og en UUID af version 4 har cirka 5,3 × 10^36 mulige tilfældige værdier. Sandsynligheden for en dublet er så lille, at den kan ignoreres i næsten alle praktiske anvendelser.

Kan jeg bruge en UUID som primærnøgle i en database? Ja. UUID'er fungerer godt som primærnøgler i distribuerede systemer, fordi enhver node kan generere en uden at kontakte en central server. Prisen er 16 bytes lagerplads pr. nøgle, mere end for et typisk heltal, samt potentielt langsommere indeksydelse i meget store tabeller.

Er en UUID det samme som en GUID? Ja. GUID (Globalt unik identifikator) er Microsofts navn for det samme koncept, der er defineret af RFC 4122 som en UUID.

Kan UUID'er af version 4 sorteres efter oprettelsestidspunkt? Nej. UUID'er af version 4 er tilfældige, så de indeholder ingen oplysninger om, hvornår de blev oprettet. En UUID af version 1 indeholder oplysninger om tidspunktet, men den skal først afkodes; sortering af teksten giver ikke oprettelsesrækkefølgen. Version 6, version 7 og ULID'er er udviklet til at kunne sorteres direkte som tekst.

Referencer

  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. Universelt unik identifikator. I Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake-id. I Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID-specifikation. GitHub. https://github.com/ulid/spec