Trenger du en identifikator som ikke kolliderer med en noen andre har laget, på en maskin du aldri har hørt om, uten å be noen om tillatelse? Det er jobben en UUID gjør. Det er et 128-biters tall, skrevet som 36 tegn i det velkjente 8-4-4-4-12-mønsteret, og hele designet går ut på at to av dem aldri vil være like, selv om ingenting koordinerer hvem som får hvilken. Denne gratis generatoren lager dem i nettleseren din: velg en versjon i «Versjon», angi hvor mange du trenger i «Antall», og trykk på «Generer». Siden åpnes med en enkelt v4, den versjonen de fleste prosjekter ønsker, slik at din første identifikator bare er ett klikk unna.
Hver identifikator bygges av nettleseren din via Web Crypto API. Versjon 4 bruker crypto.randomUUID() der nettleseren tilbyr det, og ellers crypto.getRandomValues() — en kryptografisk sterk tilfeldighetskilde snarere enn en pseudo-tilfeldig JavaScript-funksjon som Math.random(). Versjon 7 plasserer et 48-biters millisekund-tidsstempel foran, deretter en 12-biters teller som øker innenfor det samme millisekundet, og så 62 tilfeldige biter, som er sorteringsmetoden beskrevet i RFC 9562; den telleren er grunnen til at en gruppe på tusen kommer ut i rekkefølge og ikke tilfeldig blandet. Versjon 1 kombinerer et tidsstempel med en tilfeldig node-identifikator der multicast-biten er satt, slik at den aldri inneholder nettverkskortets adresse, slik de opprinnelige implementasjonene fra 1990-tallet gjorde. Versjon 3 og 5 er overhodet ikke tilfeldige: de hasher et navnerom sammen med et navn, ved hjelp av henholdsvis MD5 og SHA-1, og den hasjeringen skjer også på enheten din. Ingenting sendes til en server, ingenting logges, og når siden først er lastet inn, fortsetter den å fungere selv om du mister tilkoblingen.
«Versjon» er feltet som avgjør alt det andre. Versjon 4 består av 122 tilfeldige biter uten noen form for struktur — standardvalget og det riktige svaret når en identifikator utelukkende trenger å være unik. Versjon 7 beholder 62 tilfeldige biter, men starter med tiden den ble opprettet, slik at et sett av dem sorteres i den rekkefølgen de ble laget; det er dette som gjør det til versjonen du bør velge når identifikatoren skal bli en databasenøkkel. Versjon 1 er den opprinnelige tidsbaserte ordningen, beholdt her for systemer som fremdeles ber om den. Versjon 3 og 5 er det uvanlige paret: de er deterministiske, noe som betyr at de samme inndataene alltid produserer den samme identifikatoren, og de krever to ekstra felt — «Navnerom», som er et av standardområdene DNS, URL, OID og X.500 eller et «Egendefinert» et som du har laget selv («Egendefinert navnerom (UUID)»), og «Navn», strengen som skal identifiseres. Mat v5 med URL-navnerommet og https://example.com/a, og du får den samme UUID-en i dag, i morgen og på en helt annen persons maskin. På grunn av dette forsvinner «Antall» når v3 eller v5 er valgt: tusen kopier av en deterministisk verdi ville ganske enkelt vært tusen kopier av den samme verdien. For alle andre versjoner går «Antall» fra 1 til 1000.
Fire brytere endrer formen på utdataene uten å endre de 128 bitene under. «Store bokstaver» skriver ut heksadesimale sifre som versaler, «Uten bindestreker» gir den kompakte formen på 32 tegn som noen kolonner og filnavn foretrekker, og «Klammeparenteser» pakker verdien inn i { } — den formen Windows og .NET-verdenen kaller en GUID. Under «Avanserte innstillinger» legger urn:uuid: til prefikset som gjør den til en formell URN; den slår av «Klammeparenteser» og «Uten bindestreker» mens den er på, fordi standarden tillater nøyaktig én URN-form, og det er den kanoniske med bindestreker. «Kopieringsformat» bestemmer hvordan en gruppe settes sammen når du kopierer den: én per linje, atskilt med komma, eller hver verdi i anførselstegn med et etterfølgende komma, noe som kan limes rett inn i en matrise i kode. Under resultatet står en linje som rapporterer tilfeldigheten i biter — 122 for v4, 62 for v7 — og, for v7, tidsstempelet kodet i den første identifikatoren i gruppen, slik at tiden inni verdien blir synlig i stedet for underforstått. Både «Kopier alt» og «Lagre til fil» respekterer det valgte kopieringsformatet. «Historikk» beholder dine siste 10 grupper i din egen nettleser: klikk på en for å hente den tilbake, kopier eller slett en enkelt oppføring, eller tøm hele listen. «Tøm» fjerner resultatet og lar innstillingene dine være i fred, og forbi 50 identifikatorer blir listen til én rullbar blokk i stedet for femti rader.
Det som har størst konsekvens på denne siden, er forskjellen mellom v4 og v7 som en primærnøkkel, og det er ikke et spørsmål om smak. Databaseindekser er trær som holdes i sortert rekkefølge, og hvor en ny nøkkel havner i den rekkefølgen avgjør hvor mye arbeid innsettingen krever. En v4-nøkkel er tilfeldig, så påfølgende innsettinger havner i urelaterte hjørner av indeksen: sider som var fulle blir delt, de delene av treet som databasen holder i minnet er sjelden de delene den neste innsettingen trenger, og indeksen ender opp med å bli større og mer fragmentert enn radene den peker på rettferdiggjør. En v7-nøkkel begynner med inneværende millisekund, så påfølgende innsettinger havner ved siden av hverandre på høyre kant av treet, noe som er det mønsteret et auto-inkrementerende heltall produserer og det mønsteret indeksstrukturer ble bygget for. Det er hele avveiningen: v7 gir deg innsettingsadferden til en sekvensiell nøkkel, samtidig som den beholder egenskapen som fikk deg til å velge UUID-er i utgangspunktet, nemlig at hvem som helst kan utstede en uten å spørre en server. Det den koster deg er at opprettelsestidspunktet nå kan leses inni identifikatoren, og hvorvidt det spiller noen rolle, er et spørsmål om dataene dine, ikke om formatet.
Ingenting sjekker noensinne en UUID for unikhet; størrelsen er selve garantien. Det finnes ikke noe register, ingen rundtur til en server, og ingen oppslag — en generator produserer et tall og leverer det, og grunnen til at to av dem ikke kolliderer, er rett og slett at det finnes 2^122 mulige v4-verdier, rundt 5,3 sekstillioner. Bursdagsparadokset er den ærlige måten å dimensjonere dette på: du ville trenge omtrent 2,7 trillioner identifikatorer før det var like stor sannsynlighet for at to av dem matchet som at de ikke gjorde det, noe som tilsvarer en milliard nye UUID-er hvert sekund i 86 år. Det er verdt å være nøyaktig på hva dette lover og hva det ikke gjør. Det er en statistisk garanti, ikke en aritmetisk en, og den holder bare så lenge tilfeldigheten under det hele er ekte — en generator med dårlig seed, eller en virtuell maskin som er klonet sammen med sin entropipool, ødelegger den på en måte formatet ikke kan oppdage. Versjon 7 begrenser spørsmålet ytterligere: innenfor ett og samme millisekund kan ikke en generator gjenta seg selv i det hele tatt, fordi telleren øker i stedet for å kaste terning, og på tvers av uavhengige generatorer er det de 62 tilfeldige bitene som gjør jobben.
En UUID er en identifikator, ikke et passord. Versjon 4 er uforutsigbar, og det frister folk til å behandle den som en hemmelighet — en lenke for å tilbakestille passord, en URL som ikke kan gjettes, et sesjonstoken, en API-nøkkel. Uforutsigbarheten er reell, men hemmelighold er en egenskap ved hvordan en verdi håndteres, og identifikatorer håndteres uforsiktig i selve designet: de sitter i URL-er, som havner i nettleserhistorikk, serverlogger, referer-headere og analyseverktøy, og de blir limt inn i chat-meldinger. De andre versjonene er enda dårligere kandidater. Både versjon 1 og versjon 7 koder inn opprettelsesøyeblikket, så enhver som besitter en vet omtrent når den ble laget og kan snevre inn nabolaget til alt som ble laget samtidig med den. Versjon 3 og 5 er deterministiske med hensikt: en v5 UUID for en e-postadresse er ikke en hashet hemmelighet, det er en verdi hvem som helst med den samme adressen kan beregne på et sekund. Bruk en UUID til å navngi en ting. Bruk en passordgenerator, eller et token fra et bibliotek bygget for hemmeligheter, når verdien er nødt til å forbli ukjent.
Hvorfor velge denne UUID-generatoren?
- Generering utelukkende i nettleseren: identifikatorer lages på enheten din og sendes aldri noe sted
- Tilfeldighet fra Web Crypto API: kryptografisk sikker, ikke Math.random()
- Fem versjoner på ett sted: v1, v3, v4, v5 og v7, uten å bytte verktøy
- Ekte sortert v7: en teller inni millisekundet, slik RFC 9562 beskriver
- Deterministisk v3 og v5 med de fire standard navnerommene eller ditt eget
- Opptil 1000 om gangen, med en kompakt rullbar liste forbi femti
- Enhver vanlig form: med bindestreker, bar, store bokstaver, med klammeparenteser eller som urn:uuid: URN
- Kopier som linjer, kommaer eller verdier i anførselstegn som limes rett inn i kode
- Ubegrenset og gratis: ingen registrering, ingen bruksgrenser, ingenting på våre servere
UUID-er dukker opp uansett hvor noe må navngis før noen kan bekrefte at navnet er ledig. Applikasjonskode utsteder dem for rader den er i ferd med å sette inn, slik at objektet har en identitet før det noen gang har nådd databasen og en klient kan referere til det mens skrivingen fortsatt pågår. Distribuerte systemer lener seg tyngre på dem: flere tjenester som skriver til én tabell, en offline mobilklient som oppretter poster på et fly, en kø som må gjenkjenne den meldingen den allerede har behandlet — ingen av disse kan vente på tur ved en felles teller. Versjon 5 dekker et annet behov, som er en stabil identifikator utledet fra noe du allerede har: det samme dokument, den samme URL-en eller den samme kontoen kartlegges alltid til den samme UUID-en, slik at en import kan kjøres to ganger uten å duplisere noe. Andre steder er de rett og slett det formatet et system krever — en korrelasjonsidentifikator som tres gjennom logger og sporinger, et filnavn som ikke vil kollidere når opplastinger fra tusen brukere havner i én bøtte, en Windows-registernøkkel, testdata som må se ut som ekte data.
Noen få ærlige begrensninger er verdt å kjenne til. Én gruppe er én versjon: verdien i «Versjon» gjelder for alt i den, så en runde med v4 og en runde med v7 er to grupper. Dette er en generator, ikke en inspektør — å lime inn en UUID for å lese av versjonen eller tidsstempelet er ikke noe denne siden gjør. «Lagre til fil» skriver en vanlig tekstfil fremfor CSV eller JSON. Versjon 7 avslører åpent når den ble opprettet, ned til millisekundet, noe som er en reell avveining heller enn en feil, og versjon 1 lekker tid på samme måte; hvis dette er et problem for dataene dine, er versjon 4 den versjonen som ikke forteller noen noe som helst. To spesielle verdier fra standarden er ikke versjoner og er derfor ikke alternativer i «Versjon», men du kan kopiere dem herfra: the nil UUID, 00000000-0000-0000-0000-000000000000, og the max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Alt på denne siden følger RFC 9562, spesifikasjonen som erstattet RFC 4122 i 2024, slik at resultatet godtas av ethvert bibliotek, enhver database eller API som i det hele tatt håndterer UUID-er. Innenfor disse grensene er garantien sterk: hver identifikator bygges etter standarden, fra kryptografisk sikker tilfeldighet, på din egen maskin, og ingen andre får noen gang se den.