Spring til indhold

Effektiv CUID-generator til entydige identifikatorer i systemer

Generer kollisionsresistente entydige identifikatorer (CUIDs) til distribuerede systemer, databaser og webapplikationer. Opret skalerbare, sorterbare ID'er øjeblikkeligt.

CUID-generator

Generer hurtigt og nemt et kollisionsresistent ID.

Klik på "Generer nyt CUID" for at oprette et id.
Indlæsningsberegner...
📚

Dokumentation

Hvad er en CUID?

En CUID (kollisionsresistent unik identifikator) er en kort streng af bogstaver og cifre, der bruges til at mærke en post, fil eller hændelse, så ingen to elementer har samme navn. Dette værktøj genererer CUID2, den aktuelle version af formatet, ved hjælp af biblioteket @paralleldrive/cuid2. Hvert id er 25 tegn langt, indeholder kun små bogstaver og cifre og oprettes udelukkende i browseren — intet sendes til en server.

Sådan bruger du denne CUID-generator

  1. Klik på Generer ny CUID for at oprette et id.
  2. Klik på Kopiér til udklipsholder for at kopiere det.
  3. Indsæt id'et i en database, et filnavn eller et program.
  4. Klik på Generér igen for at få et nyt id. Kollisioner mellem separate værdier af CUID2 er yderst usandsynlige, men ikke matematisk umulige.
  5. Klik på Nulstil for at rydde resultatet.

Det genererede id gemmes også i sidens URL, så et link til resultatet kan deles eller bogmærkes.

Struktur og formel for CUID2

En CUID2 opbygges således:

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

Hashfunktionen blander fire interne inputværdier: det aktuelle tidspunkt, en tæller pr. session, et fingeraftryk af værtsmaskinen og tilfældig entropi. Den kører dem gennem SHA3-512, konverterer resultatet til base 36 (cifrene 0–9 og bogstaverne a-z) og beholder derefter 24 af disse tegn. Det tilfældige begyndelsesbogstav bringer det færdige id op på 25 tegn, hvilket er den længde, dette værktøj er indstillet til.

Kun det første tegn står alene: et tilfældigt bogstav, der placeres forrest, så hvert id begynder med et bogstav i stedet for et ciffer. Mange systemer, f.eks. SQL-tabel- og kolonnenavne, kræver, at identifikatorer begynder med et bogstav, så en CUID2 kan bruges som navn næsten overalt. Hvert tegn efter det første indgår i én sammenhængende, uigennemsigtig hashstreng — den har ingen separate sektioner.

Fordi hashfunktionen kun går én vej, kan ingen af dens input hentes ud af det færdige id. En CUID2 har intet gendanneligt tidsstempel, ingen gendannelig tæller og intet gendanneligt fingeraftryk. Det er et bevidst valg af hensyn til privatliv og sikkerhed: Et id alene kan ikke afsløre, hvornår eller hvor det blev oprettet.

Regneeksempel

Generering af et id med dette værktøj kan give:

1vcpuhcj51eomj1o31dnlqopu0
2

Her er v det tilfældige begyndelsesbogstav, og cpuhcj51eomj1o31dnlqopu0 (24 tegn) er hashkroppen. De to dele ser kun forskellige ud, fordi det første tegn med garanti er et bogstav — hashkroppen kan indeholde en blanding af bogstaver og cifre.

Hvorfor systemer bruger CUID2

  • Ingen koordinering nødvendig. Enhver maskine kan generere et gyldigt id på egen hånd uden at bede en central server eller database om den næste værdi.
  • Kollisionsresistens. Blandingen af tidspunkt, tæller, værtsfingeraftryk og tilfældig entropi gør det yderst usandsynligt, at to maskiner producerer det samme id, selv når de genererer mange id'er pr. sekund.
  • URL-venligt. En CUID2 bruger kun små bogstaver og cifre, så den behøver aldrig kodes til brug i en webadresse.
  • Hurtig, privat generering. Fordi dette værktøj kører generatoren i browseren, oprettes id'er øjeblikkeligt, og de forlader aldrig enheden.

CUID2-id'er kan ikke sorteres efter oprettelsestidspunkt. I modsætning til et automatisk inkrementerende tal i en database eller det ældre CUID-format (version 1) skjuler en CUID2 sit tidsstempel i hashen i stedet for at gemme det synligt. Programmer, der har brug for at sortere poster efter oprettelsesrækkefølge, bør gemme en separat kolonne med tidsstempel sammen med id'et.

CUID2 kontra UUID kontra automatisk inkrementerende id'er

FunktionCUID2UUID v4Automatisk inkrementering
Længde25 tegn36 tegn (med bindestreger)Varierer (normalt et kort tal)
TegnsætSmå bogstaver og cifreHexadecimale cifre og bindestregerCifre
Kræver central koordineringNejNejJa (en databasesekvens)
Kan sorteres efter oprettelsestidspunktNejNejJa
URL-venlig uden kodningJaJaJa

CUID2 og UUID v4 løser det samme problem: at generere id'er uden central koordinering. CUID2 er kortere og bruger et mindre tegnsæt, hvilket gør det lettere at læse og indsætte i en URL. En UUID er også sikker i en webadresse, fordi bindestregen er et tegn, der ikke skal kodes i URL'er, men den er 11 tegn længere.

Almindelige anvendelser

  • Primærnøgler i distribuerede databaser, hvor flere servere indsætter rækker uafhængigt af hinanden
  • Anmodnings- eller sporings-id'er, der bruges til at følge én handling på tværs af flere mikrotjenester
  • Filnavne til upload, så to filer aldrig overskriver hinanden
  • Sessions- eller token-id'er til webprogrammer
  • Meddelelses-id'er i køer som Kafka eller RabbitMQ

En kort historik

Det oprindelige CUID-format blev udgivet af Eric Elliott i 2012 som et alternativ til UUID'er til distribuerede programmer. CUID2, der blev udgivet af det samme Paralleldrive-projekt, redesignede formatet omkring en kryptografisk hash og fjernede det gendannelige tidsstempel og den gendannelige tæller, som den oprindelige version afslørede. Dette værktøj genererer kun CUID2-id'er.

Ofte stillede spørgsmål

Hvad er forskellen mellem CUID (v1) og CUID2? CUID v1 gemte et synligt tidsstempel og en tæller i id'et, hvilket gjorde id'erne sorterbare, men også afslørede, hvornår og hvor mange id'er der var blevet oprettet. CUID2 erstatter disse synlige felter med en envejs-hash, så ingen oplysninger kan læses ud af id'et.

Kan CUID'er fra dette værktøj sorteres efter oprettelsestidspunkt? Nej. En CUID2 har intet gendanneligt tidsstempel, så id'er kan ikke ordnes efter, hvornår de blev genereret, blot ved at se på strengen.

Hvor langt er et genereret id, og kan længden ændres? Dette værktøj genererer altid id'er på 25 tegn. Der er ingen mulighed i dette værktøj for at anmode om en anden længde.

Kan to forskellige maskiner generere den samme CUID2 på samme tid? Det er teoretisk muligt, men yderst usandsynligt i praksis. Hvert id blander et maskinspecifikt fingeraftryk med tilfældig entropi, så det er meget usandsynligt, at uafhængige maskiner nogensinde producerer den samme hash.

Sender dette værktøj data til en server? Nej. Id'et genereres af JavaScript, der kører i browseren ved hjælp af det lokale systemur og tilfældighed leveret af browseren. Intet overføres.

Kan jeg bruge en CUID2 som primærnøgle i en database? Ja. CUID2-id'er fungerer godt som primærnøgler i distribuerede databaser, eftersom enhver node kan generere et uden at kontrollere en central sekvens. De sorteres ikke naturligt efter indsættelsestidspunkt, så et program, der har brug for denne rækkefølge, bør gemme en separat kolonne created_at.