Hoppa till innehåll

Gratis UUID-generator - Skapa V1 & V4 UUID:er direkt

Generera unika identifierare direkt med vår kostnadsfria UUID-generator. Skapa Version 1 (tidbaserade) och Version 4 (slumpmässiga) UUID:er för databaser, API:er och distribuerade system.

UUID-generator

UUID-version
Genererad UUID
Laddningsberäknare...
📚

Dokumentation

UUID-generator

En UUID-generator är ett verktyg som skapar en universellt unik identifierare, eller UUID: en kod på 128 bitar som används för att märka en datapost så att inget annat objekt någonstans sannolikt har samma etikett. Den här sidan genererar UUID:er av version 1 (tidsbaserade) och version 4 (slumpmässiga).

Vad är en UUID?

En UUID är ett tal på 128 bitar som skrivs som 32 hexadecimala siffror (tecknen 0–9 och a–f). Det delas upp i fem grupper separerade med bindestreck, enligt mönstret 8-4-4-4-12, totalt 36 tecken. En UUID kan se ut så här:

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

UUID:er definieras av RFC 9562, som publicerades av Internet Engineering Task Force i maj 2024 och ersatte den äldre RFC:n 4122 från 2005. Båda dokumenten beskriver samma format på 128 bitar. Programvara använder dem för att identifiera databasrader, filer, användarsessioner och andra poster utan att en central myndighet behöver dela ut nummer. Eftersom mängden möjliga UUID:er är så stor kan två datorer generera UUID:er oberoende av varandra, vid samma tidpunkt, och nästan aldrig skapa samma UUID.

UUID-format och struktur

UUID:ns 128 bitar delas upp i namngivna fält. Varje fält upptar ett fast antal bitar:

  • time_low – 32 bitar
  • time_mid – 16 bitar
  • time_hi_and_version – 16 bitar
  • clock_seq_hi_and_reserved – 8 bitar
  • clock_seq_low – 8 bitar
  • node – 48 bitar
UUID-fältens layout 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

Fyra bitar i time_hi_and_version innehåller UUID:ns versionsnummer, och två bitar i clock_seq_hi_and_reserved innehåller varianten, som anger för programvaran hur resten av fälten ska läsas. Åtta versioner är definierade.

Fältnamnen ovan kommer från version 1, där de faktiskt innehåller ett tidsvärde och ett nodvärde. Andra versioner behåller samma layout 8-4-4-4-12 och samma fältgränser, men fyller de flesta bitarna med slumpdata. I en UUID av version 4 är gruppen time_low slumpmässig, inte tidsbaserad.

Så genererar du en UUID med det här verktyget

  1. Välj en version: version 1 (tidsbaserad) eller version 4 (slumpmässig).
  2. Läs UUID:n i resultatfältet. En ny UUID visas så snart sidan läses in eller versionen ändras.
  3. Välj ”Generera” för att skapa en till.
  4. Välj ”Kopiera” för att kopiera resultatet till urklipp och klistra sedan in det i kod, en databas eller en konfigurationsfil.

Panelen under resultatet delar upp UUID:n i dess fem fält och namnger varje fält, så att versionssiffran och variantsiffran är lätta att hitta.

Version 4 passar för de flesta användningsområden, inklusive databasnycklar och sessionstoken, eftersom den inte innehåller information om när eller var den skapades. Version 1 passar för poster där skapandetiden måste kunna utläsas ur själva identifieraren, till exempel loggposter.

UUID-version 1 jämfört med version 4

Version 1 kodar den aktuella tidsstämpeln samt en slumpmässigt vald klocksekvens och ett nodvärde. Standarden tillåter att nodvärdet är en dators riktiga nätverksadress (MAC-adress), men tillåter också ett slumpgenererat nodvärde som skyddar privatlivet. Det här verktyget använder alltid det slumpmässiga alternativet: dess UUID:er av version 1 läser aldrig av eller exponerar en riktig MAC-adress. Standarden kräver också att den lägsta biten i nodfältets första byte sätts till 1 för ett slumpmässigt nodvärde, och det gör verktyget. Riktiga nätverkskort har aldrig den biten satt, så en slumpmässig nod kan aldrig förväxlas med en riktig. Därför är den andra hexadecimala siffran i den femte gruppen alltid udda i en UUID av version 1 från den här sidan: 1, 3, 5, 7, 9, b, d eller f.

Tidsstämpeln i en UUID av version 1 kan läsas tillbaka, så poster kan ordnas efter skapandetid. Att sortera själva UUID-texten fungerar inte, eftersom den första gruppen innehåller tidsstämpelns lägsta 32 bitar, som rullar över ungefär var 7 minut. Version 6, som lades till i RFC 9562, lagrar samma tidsstämpel med de högsta bitarna först, så att sortering av texten fungerar.

Version 4 byggs av slumpmässiga bitar, med några bitar fixerade för att markera version och variant. Den innehåller ingen tidsstämpel och inga maskinspecifika data, så den avslöjar inget om när eller var den skapades. Den kan inte sorteras efter skapandetid.

Ytterligare sex versioner finns i standarden men genereras inte av det här verktyget: version 2 (DCE Security, används sällan); version 3 och version 5, som skapas genom att hasha ett namnområde och ett namn med MD5 eller SHA-1, så att samma indata alltid ger samma UUID; samt versionerna 6, 7 och 8, som lades till av RFC 9562 i (24 300 cm) 2024 för sorterbara och anpassade identifierare.

Så beräknas en UUID (formel)

Version 4:

  1. Generera 128 slumpmässiga bitar.
  2. Sätt de fyra versionsbitarna, den första hexadecimala siffran i den tredje gruppen, till 0100 (hex 4).
  3. Sätt de två högsta bitarna i den fjärde gruppen till 10 (så att den första hexadecimala siffran i gruppen är 8, 9, a eller b).

Endast 122 av de 128 bitarna är faktiskt slumpmässiga, eftersom 6 bitar fixeras av steg 2 och 3. Det ger 2^122, eller ungefär 5,3 × 10^36, möjliga UUID:er av version 4.

Version 1:

  1. Ta den aktuella tiden som ett antal intervall på 100 nanosekunder sedan 15 oktober 1582, datumet för den gregorianska kalenderreformen. I praktiken är det vanlig Unix-tid i millisekunder plus 12 219 292 800 000, allt multiplicerat med 10 000.
  2. Dela upp detta antal på 60 bitar i tre fält: de lägsta 32 bitarna placeras i time_low, de nästa 16 i time_mid och de högsta 12 i time_hi_and_version.
  3. Generera en klocksekvens på 14 bitar, som används för att undvika krockar om systemklockan ställs tillbaka.
  4. Generera ett nodvärde på 48 bitar och sätt den lägsta biten i dess första byte till 1.
  5. Sätt versionsbitarna till 0001 och variantbitarna till 10.

För alla UUID-versioner rymmer hela utrymmet på 128 bitar 2^128, eller ungefär 3,4 × 10^38, möjliga värden. Antalet är så stort att slumpmässiga kollisioner inte är ett praktiskt problem.

Räkneexempel

Läsa en UUID av version 4. Ta exemplet från tidigare: 550e8400-e29b-41d4-a716-446655440000.

  • Tredje gruppen, 41d4: den första siffran är 4, vilket markerar detta som en UUID av version 4.
  • Fjärde gruppen, a716: den första siffran, a (binärt 1010), börjar med 10, de obligatoriska variantbitarna.
  • De återstående hexadecimala siffrorna är den slumpmässiga nyttolasten.

Ett program som läser denna UUID kontrollerar mönstret 4 och 10 för att bekräfta formatet och behandlar sedan resten som ett ogenomskinligt slumpvärde.

Bygga en UUID av version 1. Anta att klockan visar 1 700 000 000 000 millisekunder Unix-tid, vilket motsvarar 14 november 2023, 22:13:20 UTC.

  1. Lägg till förskjutningen: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
  2. Multiplicera med 10 000 för att få intervall på 100 nanosekunder: 139,192,928,000,000,000. Hexadecimalt blir det 01EE833B04AFC000.
  3. Dela upp det: time_low = 04AFC000 (de lägsta 8 hexadecimala siffrorna), time_mid = 833B (de nästa 4) och de högsta 12 bitarna är 1EE.
  4. Sätt versionssiffran 1 framför 1EE, vilket ger time_hi_and_version = 11EE.

UUID:n blir då 04afc000-833b-11ee- följd av klocksekvensen och nodvärdet. Programvara kan vända på dessa fyra steg för att återfå 14 november 2023 från identifieraren.

Vanliga användningsområden för UUID:er

  • Primärnycklar i databaser, särskilt när flera servrar skapar poster samtidigt utan att kontrollera med varandra.
  • Sessionstoken och API-nycklar, vanligtvis version 4 på grund av det integritetsskydd den ger.
  • Identifierare för filer, händelser och resurser i distribuerade system som mikrotjänster.
  • Enhets-ID:n i stora IoT-nätverk, där varje enhet kan skapa sitt eget ID offline.

Den främsta kompromissen gäller storleken: en UUID kräver 16 byte lagringsutrymme, jämfört med 4 eller 8 byte för en enkel heltalsräknare, och vissa databaser indexerar UUID:er långsammare än sekventiella heltal.

Alternativ till UUID:er

Heltal med automatisk ökning är mindre och enklare, men fungerar inte bra när fler än en server behöver dela ut ID:n oberoende av varandra. Snowflake-ID:n, som utvecklades på Twitter, kombinerar en tidsstämpel med ett arbetsnod-ID för att skapa kompakta, sorterbara identifierare i ett distribuerat system. ULID:er (Universally Unique Lexicographically Sortable Identifiers) är ett nyare format som är utformat för att vara både slumpmässigt och sorterbart efter skapandetid, till skillnad från en UUID av standardversion 4.

UUID-standardens historia

UUID-konceptet började under 1980-talet hos Apollo Computer, som en del av företagets Network Computing System. Open Software Foundation antog senare formatet för sin Distributed Computing Environment. Internet Engineering Task Force publicerade RFC 4122 (10 500 cm) 2005 och ersatte den med RFC 9562 i maj 2024. RFC 9562 låter alla tidigare versioner fortsätta fungera oförändrade och lägger till versionerna 6, 7 och 8.

Vanliga frågor

Vad används en UUID-generator till? Den skapar unika identifierare för databaser, distribuerade system, sessionstoken, API-nycklar och enhets-ID:n, så att inga två poster behöver dela samma identifierare.

Vad är skillnaden mellan UUID v1 och v4? Version 1 kodar en tidsstämpel som programvara kan läsa tillbaka för att återfå skapandetiden. Version 4 är helt slumpmässig och innehåller ingen tidsstämpel. Verktygets utdata för version 1 använder ett slumpgenererat nodvärde i stället för en riktig MAC-adress, så den avslöjar inte heller maskinidentifierande information.

Avslöjar version 1 min MAC-adress? Inte med det här verktyget. Standarden tillåter att nodfältet i en UUID av version 1 innehåller en riktig MAC-adress, men den här generatorn fyller alltid fältet med slumpmässiga bitar och sätter den bit som markerar värdet som en icke-riktig nätverksadress.

Är UUID:er garanterat unika? Ingen identifieringsmetod kan garantera absolut unikhet, men utrymmet på 128 bitar rymmer ungefär 3,4 × 10^38 möjliga värden, och en UUID av version 4 har ungefär 5,3 × 10^36 möjliga slumpvärden. Risken för en dubblett är tillräckligt liten för att kunna ignoreras vid nästan all praktisk användning.

Kan jag använda en UUID som primärnyckel i en databas? Ja. UUID:er fungerar bra som primärnycklar i distribuerade system eftersom varje nod kan skapa en utan att kontrollera med en central server. Kostnaden är 16 byte lagringsutrymme per nyckel, mer än för ett typiskt heltal, och eventuellt långsammare indexering i mycket stora tabeller.

Är en UUID samma sak som en GUID? Ja. GUID (Globally Unique Identifier) är Microsofts benämning på samma koncept som definieras av RFC 4122 som en UUID.

Kan UUID:er av version 4 sorteras efter skapandetid? Nej. UUID:er av version 4 är slumpmässiga och innehåller därför inget register över när de skapades. En UUID av version 1 innehåller sådan information, men den måste avkodas först; att sortera texten ger inte skapandeordningen. Version 6, version 7 och ULID:er är utformade för att sorteras direkt som text.

Referenser

  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. Universellt unik identifierare. 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