Hoppa till innehåll

Effektiv CUID-generator för unika identifierare i system

Generera kollisionsresistenta unika identifierare (CUIDs) för distribuerade system, databaser och webbapplikationer. Skapa skalbara, sorteringsbara ID:n direkt.

CUID-generator

Generera en kollisionsresistent ID snabbt och enkelt.

Klicka på ”Generera ny CUID” för att skapa ett id.
Laddningsberäknare...
📚

Dokumentation

Vad är en CUID?

En CUID (kollisionsresistent unik identifierare) är en kort sträng med bokstäver och siffror som används för att märka en post, fil eller händelse så att inga två objekt har samma namn. Detta verktyg genererar CUID2, den aktuella versionen av formatet, med hjälp av biblioteket @paralleldrive/cuid2. Varje id är 25 tecken långt, innehåller endast gemener och siffror och skapas helt i webbläsaren — inget skickas till en server.

Så använder du denna CUID-generator

  1. Klicka på Generera ny CUID för att skapa ett id.
  2. Klicka på Kopiera till urklipp för att kopiera det.
  3. Klistra in id:t i en databas, ett filnamn eller en applikation.
  4. Klicka på generera igen för att skapa ett annat id. Kollisioner mellan separata värden av typen CUID2 är extremt osannolika, även om de inte är matematiskt omöjliga.
  5. Klicka på Återställ för att rensa resultatet.

Det genererade id:t lagras också i sidans URL, så att en länk till resultatet kan delas eller bokmärkas.

Struktur och formel för CUID2

En CUID2 byggs upp så här:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

Hashfunktionen blandar fyra privata indata: aktuell tid, en räknare per session, ett fingeravtryck för värddatorn och slumpmässig entropi. Dessa körs genom SHA3-512, resultatet omvandlas till bas 36 (siffrorna 0–9 och bokstäverna a–z), varefter 24 av dessa tecken behålls. Den slumpmässiga inledande bokstaven gör att det färdiga id:t blir 25 tecken långt, vilket är den längd som detta verktyg använder.

Endast det första tecknet står för sig självt: en slumpmässig bokstav som placeras först så att varje id börjar med en bokstav i stället för en siffra. Många system, till exempel SQL-tabell- och kolumnnamn, kräver att identifierare börjar med en bokstav, vilket gör en CUID2 säker att använda som namn nästan överallt. Alla tecken efter den första bokstaven ingår i en enda sammanhängande, ogenomskinlig hashkropp — den har inga separata avsnitt.

Eftersom hashen bara fungerar i en riktning kan ingen av dess indata hämtas från det färdiga id:t. En CUID2 innehåller ingen återställbar tidsstämpel, räknare eller återställbart fingeravtryck. Detta är ett medvetet val för integritet och säkerhet: ett id i sig kan inte avslöja när eller var det skapades.

Räkneexempel

När ett id genereras med detta verktyg kan resultatet se ut så här:

1vcpuhcj51eomj1o31dnlqopu0
2

Här är v den slumpmässiga inledande bokstaven, och cpuhcj51eomj1o31dnlqopu0 (24 tecken) är hashkroppen. De två delarna ser olika ut endast eftersom det första tecknet garanterat är en bokstav — hashkroppen kan innehålla en blandning av bokstäver och siffror.

Varför system använder CUID2

  • Ingen samordning behövs. Vilken dator som helst kan skapa ett giltigt id på egen hand utan att be en central server eller databas om nästa värde.
  • Kollisionsresistens. Blandningen av tid, räknare, värddatorns fingeravtryck och slumpmässig entropi gör det extremt osannolikt att två datorer skapar samma id, även när många id:n genereras per sekund.
  • URL-vänligt. En CUID2 använder endast gemener och siffror, så den behöver aldrig kodas för användning i en webbadress.
  • Snabb och privat generering. Eftersom detta verktyg kör generatorn i webbläsaren skapas id:n omedelbart och lämnar aldrig enheten.

CUID2-id:n kan inte sorteras efter skapandetid. Till skillnad från ett automatiskt inkrementerat databasnummer eller det äldre CUID-formatet (version 1) döljer en CUID2 sin tidsstämpel i hashen i stället för att lagra den öppet. Program som behöver sortera poster efter skapelseordning bör lagra en separat tidsstämpelkolumn bredvid id:t.

CUID2 jämfört med UUID och automatiskt inkrementerade id:n

FunktionCUID2UUID v4Automatiskt inkrementerat
Längd25 tecken36 tecken (med bindestreck)Varierar (vanligen ett kort nummer)
TeckenuppsättningGemener och siffrorHexadecimala siffror och bindestreckSiffror
Kräver central samordningNejNejJa (en databassekvens)
Kan sorteras efter skapandetidNejNejJa
URL-vänligt utan kodningJaJaJa

CUID2 och UUID v4 löser samma problem: att generera id:n utan central samordning. CUID2 är kortare och använder en mindre teckenuppsättning, vilket gör det lättare att läsa och klistra in i en URL. Ett UUID är också säkert i en webbadress, eftersom bindestrecket är ett icke-reserverat tecken i URL:er, men det är 11 tecken längre.

Vanliga användningsområden

  • Primärnycklar i distribuerade databaser, där flera servrar infogar rader oberoende av varandra
  • Förfrågnings- eller spårnings-id:n som används för att följa en åtgärd genom flera mikrotjänster
  • Filnamn för uppladdningar, så att två filer aldrig skriver över varandra
  • Sessions- eller token-id:n för webbapplikationer
  • Meddelande-id:n i köer som Kafka eller RabbitMQ

En kort historik

Det ursprungliga CUID-formatet lanserades av Eric Elliott 2012 som ett alternativ till UUID för distribuerade applikationer. CUID2, som publicerades av samma Paralleldrive-projekt, utformades på nytt kring en kryptografisk hash och tog bort den återställbara tidsstämpel och räknare som den ursprungliga versionen exponerade. Detta verktyg genererar endast CUID2-id:n.

Vanliga frågor och svar

Vad är skillnaden mellan CUID (v1) och CUID2? CUID v1 lagrade en synlig tidsstämpel och räknare i id:t, vilket gjorde id:n sorterbara men också avslöjade när och hur många id:n som hade skapats. CUID2 ersätter dessa synliga fält med en envägshash, så att ingen information kan läsas ut ur id:t.

Kan CUID:erna från detta verktyg sorteras efter skapandetid? Nej. En CUID2 har ingen återställbar tidsstämpel, så id:n kan inte ordnas efter när de genererades genom att bara titta på strängen.

Hur långt är ett genererat id, och kan längden ändras? Detta verktyg genererar alltid id:n med 25 tecken. Det finns inget alternativ i detta verktyg för att begära en annan längd.

Kan två olika datorer generera samma CUID2 samtidigt? Det är teoretiskt möjligt men i praktiken extremt osannolikt. Varje id blandar ett värddatorspecifikt fingeravtryck med slumpmässig entropi, så oberoende datorer kommer mycket sannolikt aldrig att skapa samma hash.

Skickar detta verktyg några data till en server? Nej. Id:t genereras av JavaScript som körs i webbläsaren med hjälp av den lokala systemklockan och slumpdata från webbläsaren. Inget överförs.

Kan jag använda en CUID2 som primärnyckel i en databas? Ja. CUID2-id:n fungerar bra som primärnycklar i distribuerade databaser, eftersom varje nod kan skapa ett utan att kontrollera en central sekvens. De sorteras inte naturligt efter insättningstid, så ett program som behöver den ordningen bör behålla en separat kolumn med namnet created_at.