UUID-generator

Generera UUID:n i din webbläsare: helt slumpmässiga v4, tidsordnade v7 för databasnycklar eller deterministiska v5. Upp till 1000 på en gång, och ingenting lämnar din enhet.

Tryck på Generera
Version
Avancerade alternativ

Behöver du en identifierare som inte krockar med någon som en annan person har skapat, på en maskin du aldrig har hört talas om, utan att be någon om lov? Det är precis vad ett UUID gör. Det är ett 128-bitars tal, skrivet som 36 tecken i det bekanta mönstret 8-4-4-4-12, och hela dess design bygger på att två av dem aldrig kommer att vara likadana, även om inget system samordnar vem som får vad. Den här gratis generatorn skapar dem direkt i din webbläsare: välj en version under "Version", ange hur många du behöver under "Antal", och tryck på "Generera". Sidan öppnas med ett enda v4, den version som de flesta projekt vill ha, så din första identifierare är bara ett klick bort.

Varje identifierare byggs av din webbläsare via Web Crypto API. Version 4 använder crypto.randomUUID() där webbläsaren stöder det och annars crypto.getRandomValues() — en kryptografiskt stark källa till slumpmässighet i stället för en pseudoslumpmässig JavaScript-funktion som Math.random(). Version 7 placerar en 48-bitars tidsstämpel i millisekunder i början, därefter en 12-bitars räknare som tickar uppåt inom samma millisekund, och sedan 62 slumpmässiga bitar, vilket är den ordningsmetod som beskrivs i RFC 9562; den räknaren är anledningen till att en grupp på tusen genereras i rätt ordning i stället för blandat. Version 1 kombinerar en tidsstämpel med en slumpmässig nodidentifierare där multicast-biten är satt, så den innehåller aldrig adressen till ditt nätverkskort som de ursprungliga implementationerna från 1990-talet gjorde. Version 3 och 5 är inte slumpmässiga alls: de hashar en namnrymd tillsammans med ett namn, med hjälp av MD5 respektive SHA-1, och den beräkningen sker också på din enhet. Inget skickas till en server, inget loggas, och när sidan väl har laddats fortsätter den att fungera även om du stänger av uppkopplingen.

"Version" är det fält som avgör allt annat. Version 4 är 122 slumpmässiga bitar helt utan struktur — standardvalet och rätt svar när en identifierare enbart behöver vara unik. Version 7 behåller 62 slumpmässiga bitar men inleds med tidpunkten då den skapades, så att en uppsättning av dem sorteras i den ordning de gjordes; detta är den version du ska välja när identifieraren kommer att bli en databasnyckel. Version 1 är det ursprungliga tidsbaserade formatet, som finns kvar här för de system som fortfarande kräver det. Version 3 och 5 är ett udda par: de är deterministiska, vilket innebär att samma indata alltid ger samma identifierare, och de kräver två extra fält — "Namnrymd", som är en av standardrymderna DNS, URL, OID och X.500 eller din egen "Anpassad namnrymd (UUID)", samt "Namn", strängen som ska identifieras. Mata in namnrymden URL och https://example.com/a i v5, så får du samma UUID i dag, i morgon och på någon annans dator. På grund av detta försvinner "Antal" när v3 eller v5 väljs: tusen kopior av en deterministisk värde skulle bara vara tusen kopior av exakt samma värde. För alla andra versioner går "Antal" från 1 till 1000.

Fyra reglage ändrar formen på utdatan utan att påverka de underliggande 128 bitarna. "Versaler" skriver ut de hexadecimala siffrorna som stora bokstäver, "Utan bindestreck" ger det kompakta formatet med 32 tecken som en del kolumner och filnamn föredrar, och "Klammerparenteser" omsluter värdet i { } — det format som Windows och .NET-världen kallar GUID. Under "Avancerade alternativ" lägger urn:uuid: till det prefix som gör det till ett formellt URN; det inaktiverar "Klammerparenteser" och "Utan bindestreck" så länge det är aktiverat, eftersom standarden enbart tillåter exakt ett URN-format, och det är det kanoniska formatet med bindestreck. "Kopieringsformat" avgör hur en grupp slås samman när du hämtar den: en per rad, separerade med kommatecken, eller varje värde inom citattecken med ett avslutande kommatecken, vilket kan klistras in direkt i en array i din kod. Under resultatet finns en rad som rapporterar slumpmässigheten i bitar — 122 för v4, 62 för v7 — samt, för v7, den tidsstämpel som är kodad i seriens första identifierare, så att tiden inuti värdet är synlig snarare än underförstådd. Både "Kopiera alla" och "Spara till fil" respekterar det valda kopieringsformatet. "Historik" sparar dina senaste 10 grupper direkt i din webbläsare: klicka på en för att hämta tillbaka den, kopiera eller ta bort en enskild post, eller rensa hela listan. "Rensa" tömmer resultatet men låter dina inställningar vara, och vid fler än 50 identifierare förvandlas listan till ett enda rullbart block i stället för femtio rader.

Den mest avgörande detaljen på den här sidan är skillnaden mellan v4 och v7 när de används som en primärnyckel (primary key) i en databas, och det handlar inte om tycke och smak. Databasindex är trädstrukturer som lagras i sorterad ordning, och var en ny nyckel landar i den ordningen avgör hur mycket arbete insättningen kommer att kosta. En v4-nyckel är slumpmässig, vilket innebär att på varandra följande insättningar hamnar i helt orelaterade hörn av indexet: sidor (page split) som var fulla delas upp, de delar av trädet som databasen håller i minnet är sällan de delar som nästa insättning behöver, och indexet blir i slutändan mycket större och mer fragmenterat än vad de rader det pekar på motiverar. En v7-nyckel börjar med den aktuella millisekunden, vilket innebär att på varandra följande insättningar landar intill varandra vid trädets högra kant, vilket är precis det mönster som ett automatiskt uppräknande heltal ger och det mönster som indexstrukturerna byggdes för. Det är hela avvägningen: v7 ger dig insättningsbeteendet hos en sekventiell nyckel samtidigt som du behåller den egenskap som fick dig att välja UUID från första början, nämligen att vem som helst kan skapa en utan att fråga en central server. Priset för detta är att skapelsetiden nu är läsbar inuti identifieraren, och huruvida det spelar någon roll är en fråga om din data, inte om formatet.

Ingenting kontrollerar någonsin ett UUID för att se om det är unikt; dess storlek är garantin. Det finns inget register, inga anrop till en server, ingen sökning — en generator producerar ett nummer och överlämnar det, och anledningen till att två av dem inte krockar är helt enkelt att det finns 2^122 möjliga värden för v4, vilket är ungefär 5,3 sextiljoner. Födelsedagsparadoxen (birthday problem) är det ärliga sättet att sätta dimension på detta: du skulle behöva uppemot 2,7 triljoner identifierare innan det överhuvudtaget fanns en jämn chans att två av dem var likadana, vilket motsvarar en miljard nya UUID:n varje sekund i 86 år. Det är värt att vara exakt om vad detta lovar och inte lovar. Det är en statistisk garanti, ingen aritmetisk sådan, och den håller bara så länge slumpmässigheten i botten är äkta — en generator med en dålig startpunkt (seed), eller en virtuell maskin som klonats tillsammans med sin entropipool, bryter löftet på ett sätt som formatet inte kan upptäcka. Version 7 begränsar den frågan ytterligare: under en enskild millisekund kan en generator inte upprepa sig alls, eftersom räknaren stegar upp i stället för att slå tärning, och mellan oberoende generatorer gör de 62 slumpmässiga bitarna jobbet.

Ett UUID är en identifierare, inte ett lösenord. Version 4 är oförutsägbar, och detta frestar ofta människor att behandla den som en hemlighet — en länk för att återställa lösenord, en URL som inte går att gissa sig till, en sessionstoken, en API-nyckel. Oförutsägbarheten är förvisso verklig, men sekretess är en egenskap hos hur ett värde hanteras, och identifierare hanteras avsiktligt vårdslöst: de hamnar i URL:er, som lagras i webbläsarhistorik, serverloggar, referrer-rubriker och analysverktyg, och klistras ofta in i chattmeddelanden. De andra versionerna är ännu sämre kandidater. Både version 1 och version 7 kodar tidpunkten för skapandet, så alla som har en vet ungefär när den gjordes och kan därmed ringa in hela omgivningen av allt annat som skapades samtidigt. Version 3 och 5 är avsiktligt deterministiska: ett v5 UUID för en e-postadress är inte en hemlig, hashad sträng, det är ett värde som alla med samma adress kan räkna ut på en sekund. Använd ett UUID för att namnge en sak. Använd en lösenordsgenerator, eller en token från ett bibliotek skapat just för hemligheter, när värdet måste förbli okänt.

Varför välja den här UUID-generatorn?

UUID:n dyker upp överallt där något måste få ett namn innan något annat kan bekräfta att namnet är ledigt. Applikationskoden skapar dem för rader den precis ska till att sätta in, så att objektet har en identitet innan det ens har nått databasen och en klient kan referera till det medan skrivningen fortfarande pågår. Distribuerade system förlitar sig ännu hårdare på dem: flera tjänster som skriver till en och samma tabell, en mobil klient offline som skapar poster på ett flygplan, en kö som måste känna igen det meddelande den redan har bearbetat — inget av dessa system kan vänta på sin tur vid en gemensam räknare. Version 5 fyller ett annat behov, vilket är en stabil identifierare som härleds från något du redan har: samma dokument, samma URL eller samma konto mappas alltid till exakt samma UUID, så en import kan köras två gånger utan att någonting dupliceras. Någon annanstans är de helt enkelt det format som ett system kräver — en korrelationsidentifierare som träs genom loggar och spårningar, ett filnamn som inte krockar när uppladdningar från tusen användare hamnar i samma mapp, en registernyckel i Windows, en uppsättning testdata som måste se ut som riktig data.

Några ärliga begränsningar är värda att känna till. En grupp är en version: värdet i "Version" gäller för allt i den, så en körning med v4 och en körning med v7 är två helt separata grupper. Det här är en generator, inte en inspektör — att klistra in ett UUID för att läsa av dess version eller tidsstämpel är inte något som den här sidan gör. "Spara till fil" skriver en vanlig textfil, inte en export till CSV eller JSON. Version 7 avslöjar helt öppet när den skapades, ner till på millisekunden, vilket är en verklig avvägning snarare än en brist, och version 1 läcker tid på samma sätt; om det utgör ett problem för din data är det version 4 du ska använda, då den inte avslöjar något för någon. Två specialvärden från standarden är inte egentliga versioner och finns därför inte som alternativ under "Version", men du kan kopiera dem härifrån: nil UUID, 00000000-0000-0000-0000-000000000000, och max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Allting på den här sidan följer RFC 9562, den specifikation som år 2024 ersatte RFC 4122, vilket gör att utdatan utan problem accepteras av varje bibliotek, databas eller API som överhuvudtaget kan hantera UUID:n. Inom dessa ramar är garantin urstark: varje identifierare byggs enligt standarden, från kryptografiskt säker slumpmässighet, lokalt på din egen maskin, och ingen annan ser den någonsin.

FAQ

Hur genererar jag ett UUID?

Välj en version under "Version", ställ in hur många du behöver under "Antal", och tryck på "Generera". Sidan öppnas med en enda identifierare av version 4, vilket är det de flesta projekt vill ha, så ett vanligt UUID är bara ett klick bort. Varje värde visas med sin egen kopieringsknapp, och "Kopiera alla" hämtar hela gruppen på en gång.

Vad är skillnaden mellan UUID v4 och v7?

Version 4 består av 122 slumpmässiga bitar utan någon som helst struktur, så två av dem saknar relation till varandra. Version 7 lägger de första 48 bitarna på den millisekund då den skapades, lägger till en räknare och 62 slumpmässiga bitar, och kan därför sorteras: en grupp kommer ut i samma ordning som den skapades. Använd v4 när en identifierare enbart behöver vara unik, och v7 när den även ska vara en databasnyckel.

Vilken UUID-version ska jag använda?

Version 4 såvida du inte har en specifik anledning att välja en annan. Välj version 7 om identifieraren kommer att bli en primärnyckel och insättningsprestanda är viktig, version 5 om du behöver att samma indata alltid ger samma identifierare, och version 1 enbart om ett system du måste prata med uttryckligen kräver det. Version 3 är version 5 men med MD5 i stället för SHA-1, och finns av kompatibilitetsskäl.

Är de genererade UUID:na verkligen slumpmässiga och säkra?

Slumpmässigheten är kryptografiskt säker: den kommer från din webbläsares Web Crypto API, via crypto.randomUUID() eller crypto.getRandomValues(), och inte från Math.random(). Säker i meningen att inte kunna gissas är dock en helt annan fråga än säker i meningen hemlig — ett UUID är en identifierare och bör inte användas som lösenord, sessionstoken eller API-nyckel.

Kan jag generera många UUID:n på en gång?

Ja, upp till 1000 i ett svep. Ställ in "Antal" och tryck på "Generera"; vid fler än femtio värden omvandlas resultatet till ett enda rullbart block i stället för en lång radlista. "Kopiera alla" och "Spara till fil" hämtar hela gruppen, sammanfogad på det sätt som "Kopieringsformat" anger — en per rad, separerade med kommatecken, eller inom citattecken för att klistras rakt in i en array.

Varför ger v3 och v5 mig samma UUID varje gång?

Eftersom det är precis vad de är till för. Version 3 och 5 är deterministiska: de hashar den namnrymd och det namn du ger dem, så att identiska indata alltid producerar en identisk identifierare, på alla maskiner och i alla språk. Det gör dem användbara för att härleda en stabil identifierare från något du redan har, och det är också anledningen till att "Antal" döljs när du väljer dem.

Vad är Namnrymd och Namn, och vilken namnrymd ska jag välja?

De är de två indata från vilka ett v3 eller v5 UUID beräknas. "Namnrymd" anger vilken typ av sak namnet är — DNS för värdnamn, URL för adresser, OID och X.500 för de specifika katalogstrukturerna, eller "Anpassad" ("Anpassad namnrymd (UUID)") om du vill ange ett eget namnrymds-UUID, vilket är det vanliga valet inuti en applikation. "Namn" är själva strängen. Olika namnrymder ger helt olika resultat för samma namn, vilket är själva poängen med att ha dem.

Varför är UUID v7 bättre än v4 för en primärnyckel i en databas?

På grund av var värdena landar i indexet. Ett index lagras i sorterad ordning, och en slumpmässig v4-nyckel landar varsomhelst i det, vilket gör att insättningar delar upp sidor kors och tvärs i trädet och de delar som hålls i minnet är sällan de som behövs härnäst. En v7-nyckel inleds med den aktuella millisekunden, så på varandra följande insättningar hamnar tillsammans i slutet av indexet, vilket är exakt så en sekventiell heltalsnyckel beter sig — samtidigt som vilken tjänst som helst tillåts att skapa en identifierare utan att fråga en central räknare.

Skulle två UUID:n någonsin kunna vara likadana?

I teorin ja, i praktiken nej, och det är bra att veta varför. Ingenting verifierar någonsin det unika i värdet: det finns helt enkelt 2^122 möjliga värden för version 4, alltså omkring 5,3 sextiljoner, och det skulle krävas ungefär 2,7 triljoner av dem — en miljard per sekund i 86 år — innan det ens fanns en jämn chans för en enda krock. Garantin är statistisk snarare än absolut, och den förutsätter att slumpmässigheten är genuint äkta, vilket är varför denna generator använder Web Crypto API i stället för en vanlig pseudoslumpmässig funktion.

Kan jag använda ett UUID som ett lösenord, en API-nyckel eller en sessionstoken?

Nej, och detta är det misstag som kostar mest. Ett v4 UUID är oförutsägbart, men identifierare behandlas som om de vore offentliga: de hamnar i URL:er, webbläsarhistorik, serverloggar, referrer-rubriker och analysverktyg. Version 1 och 7 avslöjar dessutom när de skapades, och version 3 och 5 kan räknas ut på nytt av vem som helst som känner till deras indata. För allt som måste förbli hemligt, använd en lösenordsgenerator eller en token från ett bibliotek avsett för hemligheter.

Avslöjar UUID v7 när det skapades?

Ja, ner på millisekunden, och detta är avsiktligt snarare än ett misstag — tidsstämpeln är just det som gör v7 sorterbart. Raden under resultatet visar den tid som är inkodad i det första värdet av gruppen, så du ser exakt vad som exponeras. Även version 1 bär på en tidsstämpel. Om skapelsetiden är något du föredrar att inte publicera, är version 4 den version som inte innehåller någon tid alls.

Exponerar UUID v1 min MAC-adress?

Inte här. Den ursprungliga strukturen använde datorns nätverkskort som nodfält, vilket är var v1:s dåliga rykte kommer ifrån, men standarden tillåter också en slumpmässig nodidentifierare med multicast-biten satt, och det är vad den här generatorn producerar. Din hårdvaruadress läses aldrig av och hamnar aldrig i utdatan.

Vad gör Versaler, Utan bindestreck, Klammerparenteser och urn:uuid: för skillnad?

Bara presentationen — de 128 bitarna därunder är helt identiska i varje format. "Versaler" skriver de hexadecimala siffrorna med stora bokstäver, "Utan bindestreck" ger den kompakta 32-teckensversionen, "Klammerparenteser" lägger till klamrar på samma sätt som Windows och .NET skriver ett GUID, och urn:uuid: lägger till prefixet som gör det till ett formellt URN. urn:uuid: stänger av de andra två valen medan det är aktivt, eftersom standarden definierar exakt ett URN-format och det är det kanoniska formatet med bindestreck.