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
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
2UUID'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 bittime_mid– 16 bittime_hi_and_version– 16 bitclock_seq_hi_and_reserved– 8 bitclock_seq_low– 8 bitnode– 48 bit
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
- Vælg en version: version 1 (tidsbaseret) eller version 4 (tilfældig).
- Læs UUID'en i resultatfeltet. En ny UUID vises, så snart siden indlæses, eller versionen ændres.
- Vælg "Generér" for at få en ny.
- 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:
- Generér 128 tilfældige bit.
- Sæt de fire versionsbit, det første hexadecimale ciffer i den tredje gruppe, til
0100(hex4). - Sæt de to øverste bit i den fjerde gruppe til
10(så det første hexadecimale ciffer i gruppen er8,9,aellerb).
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:
- 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.
- Opdel denne tælling på 60 bit i tre felter: de laveste 32 bit placeres i
time_low, de næste 16 itime_midog de øverste 12 itime_hi_and_version. - Generér en klokkesekvens på 14 bit, som bruges til at undgå sammenfald, hvis systemuret stilles tilbage.
- Generér en nodeværdi på 48 bit, hvor den laveste bit i den første byte sættes til 1.
- Sæt versionsbittene til
0001og variantbittene til10.
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 er4, hvilket markerer den som en UUID af version 4. - Fjerde gruppe,
a716: Det første ciffer,a(binært1010), begynder med10, 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.
- Læg forskydningen til: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
- Gang med 10.000 for at få intervaller på 100 nanosekunder: 139,192,928,000,000,000. I hexadecimal form er det
01EE833B04AFC000. - Opdel det:
time_low=04AFC000(de laveste 8 hexadecimale cifre),time_mid=833B(de næste 4), og de øverste 12 bit er1EE. - Sæt versionscifret
1foran1EE, hvilket givertime_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
- Davis, K., Peabody, B. & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Universelt unik identifikator. I Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake-id. I Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID-specifikation. GitHub. https://github.com/ulid/spec