Hva er en UUID? Format, versjoner og UUID vs. GUID
En UUID (universally unique identifier, universelt unik identifikator) er et 128-biters tall som brukes til å merke data uten å spørre en sentral server om neste ledige ID. Den skrives vanligvis med 36 tegn: 32 heksadesimale sifre i fem grupper etter mønsteret 8-4-4-4-12, for eksempel f47ac10b-58cc-4372-a567-0e02b2c3d479. Formatet er definert i RFC 9562 (mai 2024), som erstattet RFC 4122.
Prøv gratis: UUID-generator Gratis å bruke, ingen konto nødvendig.
Hva er en UUID nyttig til i praksis? Ethvert system kan lage en på egen hånd, uten nett, og likevel være praktisk talt sikker på at ingen andre noen gang lager den samme verdien. Derfor er UUID-er populære som databasenøkler, filnavn, forespørsels-ID-er og meldings-ID-er. Denne guiden forklarer formatet, versjonene, den reelle sjansen for kollisjon, UUID vs. GUID og hvordan du velger mellom v4 og v7. Vil du prøve eksemplene, åpner du den gratis UUID-generatoren i en annen fane.
Hva er en UUID bygd opp av? Formatet 8-4-4-4-12
De 128 bitene er 16 byte. Hver byte er to heksadesimale sifre, som gir 32 sifre, og fire bindestreker gjør tekstformen 36 tegn lang. To posisjoner har fast betydning:
f47ac10b-58cc-4372-a567-0e02b2c3d479
^ ^
| +-- 17. siffer "a": variant (8, 9, a eller b = RFC 9562)
+------- 13. siffer "4": versjon 4 (tilfeldig)
- Versjonen er første siffer i den tredje gruppen (det 13. heksadesimale sifferet). Den forteller hvordan UUID-en ble laget.
- Varianten er første siffer i den fjerde gruppen (det 17. heksadesimale sifferet). For standard-UUID-er er de to øverste bitene
10, så dette sifferet er alltid8,9,aellerb. Verdiene0–7tilhører gamle NCS-identifikatorer,cogder reservert for bakoverkompatibilitet med Microsoft, ogeogfer reservert for fremtidig bruk.
Fordi disse 6 bitene er faste, har en tilfeldig UUID av versjon 4 128 − 6 = 122 tilfeldige biter. De heksadesimale bokstavene kan være store, små eller blandet, så F47AC10B-… og f47ac10b-… er samme UUID; små bokstaver er den vanligste konvensjonen.
UUID-versjoner: v1 til v8, nil og max
RFC 9562 definerer åtte versjoner og to spesialverdier:
| Versjon | Hvordan den bygges | Typisk bruk |
|---|---|---|
| v1 | 60-biters tidsstempel (steg på 100 ns siden 1582) + klokkesekvens + node-ID, tradisjonelt MAC-adressen | Eldre systemer |
| v2 | DCE Security, ikke beskrevet i detalj i RFC-en | Sjelden brukt |
| v3 | MD5-hash av en navnerom-UUID og et navn | Gjentakbare ID-er (foretrekk v5) |
| v4 | 122 tilfeldige biter | Standardvalg |
| v5 | SHA-1-hash av en navnerom-UUID og et navn | Gjentakbare ID-er fra navn |
| v6 | Samme felt som v1, omorganisert slik at tidsstempelet kan sorteres | Oppgradering fra v1 |
| v7 | 48-biters Unix-tidsstempel i millisekunder + tilfeldige biter | Databasenøkler, sorterbare ID-er |
| v8 | Egendefinert oppsett; bare versjon og variant er faste | Leverandørspesifikke formater |
| Nil | 00000000-0000-0000-0000-000000000000 |
Plassholder for «ingen verdi» |
| Max | ffffffff-ffff-ffff-ffff-ffffffffffff |
Vaktverdi eller øvre grense |
Navnebaserte versjoner er deterministiske. DNS-navnerommet med navnet example.com gir alltid v5-UUID-en cfbff0d1-9375-5685-968c-48ce8b15ae17, på alle maskiner og i alle programmeringsspråk. Bruk dem når samme inndata alltid skal gi samme ID.
En UUID av versjon 7 legger tiden først. Dette eksempelet ble laget 24.09.2026 kl. 12:00:00 UTC, altså 1 790 251 200 000 millisekunder etter Unix-epoken, eller 0x01a0d3496e00 heksadesimalt:
01a0d349-6e00-7c3f-9d21-4b6e8a1f0c57
^^^^^^^^^^^^^ ^ ^
| | +-- variantsiffer "9"
| +------- versjon 7
+--------------------- 48-biters tidsstempel i ms
De resterende 74 bitene er tilfeldige (eller delvis en teller, avhengig av biblioteket).
Er UUID-er unike? Sjansen for kollisjon med v4
UUID-er er ikke garantert unike, men unike med overveldende sannsynlighet. Med 122 tilfeldige biter finnes det 2^122 ≈ 5,3 × 10^36 mulige v4-verdier. Bursdagstilnærmingen gir antallet n UUID-er du trenger for 50 % sjanse for at minst to er like:
n ≈ √(2 · ln 2 · 2^122) ≈ 2,71 × 10^18
Det er 2,71 trillioner UUID-er. Med én milliard per sekund ville du nådd det tallet etter rundt 86 år. Ved realistiske mengder er risikoen neglisjerbar:
| Genererte v4-UUID-er | Sannsynlighet for en kollisjon |
|---|---|
| 1 milliard (10^9) | ca. 9,4 × 10^-20 |
| 1 billion (10^12) | ca. 9,4 × 10^-14 |
| 103 billioner (1,03 × 10^14) | ca. 1 av 1 milliard |
| 2,71 × 10^18 | ca. 50 % |
Tallene forutsetter en god tilfeldighetsgenerator. I praksis kommer kollisjoner fra feil: en dårlig initialisert generator, klonede virtuelle maskiner som gjenbruker samme tilstand, eller kode som kopierer en ID i stedet for å lage en ny. En unik-begrensning i databasen er derfor fortsatt lurt.
UUID vs. GUID: hva er forskjellen?
I praksis ingen. GUID (globally unique identifier) er Microsofts navn på den samme 128-biters verdien, brukt i Windows, COM, .NET og SQL Server. Guid.NewGuid() i .NET lager for eksempel en helt vanlig UUID av versjon 4. Forskjellene handler om visning og lagring:
- Skrivemåte. Microsoft-verktøy viser ofte GUID-er med store bokstaver og i krøllparenteser, som
{F47AC10B-58CC-4372-A567-0E02B2C3D479}. Det er samme verdi som formen med små bokstaver. - Byterekkefølge i binærform. Microsofts GUID-struktur deler verdien i ett 32-biters felt, to 16-biters felt og 8 enkeltbyte. På little-endian-systemer, og i
Guid.ToByteArray()i .NET, lagres de tre første feltene med bytene i omvendt rekkefølge, mens de siste 8 bytene beholder rekkefølgen. Dette kalles ofte mixed-endian:
Tekstform: f47ac10b-58cc-4372-a567-0e02b2c3d479
RFC-rekkefølge: f4 7a c1 0b | 58 cc | 43 72 | a5 67 0e 02 b2 c3 d4 79
Microsoft: 0b c1 7a f4 | cc 58 | 72 43 | a5 67 0e 02 b2 c3 d4 79
Teksten er identisk; bare de 16 rå bytene er forskjellige. Kopierer du binære GUID-er mellom et Microsoft-system og et system som forventer RFC-rekkefølge, blir verdien rotet til. Konverter via tekstformen, eller bruk ToByteArray(bigEndian: true) fra .NET 8. Microsoft beskriver de omvendte gruppene i referansen for Guid.ToByteArray.
«UUID vs. GUID» er altså et spørsmål om navn, ikke et valg du må ta.
UUID v4 vs. v7 som primærnøkkel
Begge er 128-biters UUID-er, men de oppfører seg svært ulikt i en indeks.
- v4 er tilfeldig, så hver ny rad havner på et tilfeldig sted i B-tre-indeksen. Innsettinger berører sider over hele indeksen, noe som gir sidesplitting, flere skrivinger og et større arbeidssett som må ligge i minnet.
- v7 starter med et tidsstempel, så nye ID-er er større enn eldre. Innsettinger havner på slutten av indeksen, omtrent som med et autoinkrementerende heltall, og rader som opprettes samtidig, ligger samlet.
Med v7 kan du også sortere etter ID for å få opprettelsesrekkefølgen, og lese opprettelsestidspunktet ut av ID-en. Det er også ulempen: Alle som ser en v7-ID, vet når posten ble laget, ned på millisekundet. Bruk v4 for offentlige identifikatorer der tidspunktet skal holdes privat, og v7 for interne nøkler i store tabeller med mange skrivinger.
Slik lagrer du UUID-er effektivt
Lagre de 16 bytene, ikke teksten på 36 tegn. En tekstkolonne bruker minst 36 byte per verdi, mer enn det dobbelte, og hver indeks som inneholder nøkkelen, vokser tilsvarende.
- PostgreSQL: bruk den innebygde typen
uuid(16 byte). - SQL Server: bruk
uniqueidentifier(16 byte). - MySQL: bruk
BINARY(16)medUUID_TO_BIN()ogBIN_TO_UUID()for konvertering.
Konverter til tekst bare i kantene av systemet, for eksempel i API-er og logger.
Slik genererer du en UUID i kode
De fleste språk har en innebygd generator:
import uuid
uuid.uuid4() # random v4
uuid.uuid7() # v7, Python 3.14+
uuid.uuid5(uuid.NAMESPACE_DNS, "example.com") # cfbff0d1-9375-5685-968c-48ce8b15ae17
crypto.randomUUID(); // v4, in browsers (HTTPS pages) and Node.js
SELECT gen_random_uuid(); -- v4, built in since PostgreSQL 13
SELECT uuidv7(); -- v7, PostgreSQL 18+
Guid.NewGuid(); // v4
Guid.CreateVersion7(); // v7, .NET 9+
crypto.randomUUID() er dokumentert på MDN. I nettleseren fungerer den bare på sikre sider (HTTPS).
Slik validerer du en UUID med regex
Dette mønsteret godtar den kanoniske formen av versjon 1–8 med standardvarianten (bruk treff som ikke skiller mellom store og små bokstaver):
^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
[1-8] sjekker versjonssifferet og [89ab] varianten. Legg til egne kontroller hvis du også vil godta nil- og max-UUID, krøllparenteser eller prefikset urn:uuid:.
UUID-er er ikke hemmeligheter
En UUID identifiserer noe; den beskytter det ikke. RFC 9562 sier at implementasjoner ikke skal anta at UUID-er er vanskelige å gjette, og at de ikke må brukes som sikkerhetsmekanisme. v1 avslører opprettelsestidspunktet og tradisjonelt MAC-adressen til maskinen som laget den; v7 avslører opprettelsestidspunktet. Selv en v4 fra en sikker generator er ikke ment som token for tilbakestilling av passord eller som API-nøkkel. Bruk et eget tilfeldig token til det, for eksempel fra token-generatoren, og sjekk likevel tilgangen ved hver forespørsel.
Alternativer til UUID
ULID er et populært alternativ med lignende mål: 128 biter, et 48-biters tidsstempel i millisekunder og 80 tilfeldige biter, skrevet som 26 tegn i Crockford Base32 slik at ID-en kan sorteres som tekst. Trenger du det formatet, lager og dekoder ULID-generatoren ULID-er og konverterer dem til UUID-er. For nye prosjekter gir UUID v7 samme tidsrekkefølge og beholder standardformatet som databaser forstår direkte.
Lag og inspiser UUID-er på nett
Den gratis UUID-generatoren kjører helt i nettleseren. Den lager UUID-er av versjon v1, v3, v4, v5 og v7 samt nil- og max-verdiene, opptil 500 om gangen. Du kan velge små bokstaver, store bokstaver eller krøllparenteser, fjerne bindestrekene og skille listen med linjeskift, komma, mellomrom eller som JSON-matrise, og deretter kopiere den eller laste den ned som .txt eller .json. For v3 og v5 velger du navnerommet DNS, URL, OID eller X.500, eller limer inn ditt eget.
Den innebygde validatoren godtar kanonisk form, krøllparenteser, urn:uuid: og inndata uten bindestreker, og viser versjon, variant og kanonisk form. Den dekoder tidsstempelet i v1- og v7-UUID-er, og klokkesekvensen og noden i v1. Noen begrensninger: Den lager ikke v6 eller v8, v1 bruker en tilfeldig node i stedet for MAC-adressen din, og v7-ID-er som lages i samme millisekund, er ikke garantert sortert i opprettelsesrekkefølge, fordi bitene etter tidsstempelet er tilfeldige og ikke en teller.
FAQ
Er en UUID det samme som en GUID?
Ja. GUID er Microsofts navn på en UUID. Verdien og tekstformatet er de samme; Microsoft-verktøy viser ofte GUID-er med store bokstaver i krøllparenteser, og noen Microsoft-API-er lagrer de tre første feltene i little-endian-rekkefølge i binærform.
Kan to UUID-er noen gang bli like?
I teorien ja, i praksis nesten aldri. Med v4 trenger du rundt 2,71 × 10^18 UUID-er for 50 % sjanse for ett duplikat. Ekte duplikater skyldes som regel programvarefeil eller en defekt tilfeldighetsgenerator, så behold en unik-begrensning på nøkkelkolonner.
Bør jeg bruke UUID v4 eller v7?
Bruk v7 for primærnøkler i tabeller med mange innsettinger, fordi tidsordnede ID-er holder indeksene kompakte og sorteres etter opprettelsestid. Bruk v4 når ID-en er offentlig og ikke skal avsløre noe om når posten ble laget.
Hvor lang er en UUID?
En UUID er 128 biter, altså 16 byte. Standard tekstform har 36 tegn: 32 heksadesimale sifre og 4 bindestreker. Uten bindestreker er den 32 tegn, og med krøllparenteser 38.
Er det trygt å bruke UUID-er i URL-er?
De kan vises, men de er ingen tilgangskontroll. En tilfeldig v4 er vanskelig å gjette, men den kan lekke via logger, nettleserhistorikk eller Referer-headeren, og v1 og v7 avslører når de ble laget. Sjekk alltid at brukeren har tilgang til ressursen.
Prøv gratis: UUID-generator Gratis å bruke, ingen konto nødvendig.