Generator Eficient de CUID pentru Identificatori Unici în Sisteme
Generați identificatori unici rezistenți la coliziuni (CUID) pentru sisteme distribuite, baze de date și aplicații web. Creați ID-uri scalabile și sortabile instant.
Generator CUID
Generați rapid și ușor un ID rezistent la coliziuni.
Documentație
Ce este un CUID?
Un CUID (identificator unic rezistent la coliziuni) este un șir scurt de litere și cifre folosit pentru identificarea unei înregistrări, a unui fișier sau a unui eveniment, astfel încât niciun două elemente să nu aibă același nume. Acest instrument generează CUID2, versiunea actuală a formatului, folosind biblioteca @paralleldrive/cuid2. Fiecare identificator are 25 de caractere, conține doar litere mici și cifre și este creat în întregime în browser — nimic nu este trimis către un server.
Cum se utilizează generatorul CUID
- Faceți clic pe Generate New CUID pentru a crea un identificator.
- Faceți clic pe Copy to Clipboard pentru a-l copia.
- Lipiți identificatorul într-o bază de date, într-un nume de fișier sau într-o aplicație.
- Faceți din nou clic pe Generate pentru a obține un alt identificator. Coliziunile între valori CUID2 distincte sunt extrem de improbabile, deși nu sunt imposibile din punct de vedere matematic.
- Faceți clic pe Reset pentru a șterge rezultatul.
Identificatorul generat este stocat și în URL-ul paginii, astfel încât un link către rezultat poate fi partajat sau salvat ca favorit.
Structura și formula CUID2
Un CUID2 este construit astfel:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Funcția hash combină patru date de intrare interne: momentul curent, un contor per sesiune, amprenta mașinii gazdă și entropie aleatoare. Le trece prin SHA3-512, convertește rezultatul în baza 36 (cifrele 0–9 și literele a-z), apoi păstrează 24 dintre aceste caractere. Litera aleatorie de la început aduce identificatorul final la 25 de caractere, lungimea configurată pentru acest instrument.
Doar primul caracter este independent: o literă aleatorie plasată la început, astfel încât fiecare identificator să înceapă cu o literă, nu cu o cifră. Multe sisteme, precum numele tabelelor și coloanelor SQL, impun ca identificatorii să înceapă cu o literă, astfel încât un CUID2 poate fi folosit în siguranță ca nume aproape oriunde. Fiecare caracter de după prima literă face parte dintr-un singur șir hash continuu și opac — nu are secțiuni distincte.
Deoarece hash-ul funcționează într-un singur sens, niciuna dintre intrările sale nu poate fi extrasă din identificatorul final. Un CUID2 nu conține o marcă temporală recuperabilă, un contor recuperabil sau o amprentă recuperabilă. Aceasta este o alegere deliberată de confidențialitate și securitate: un identificator, luat singur, nu poate dezvălui când sau unde a fost creat.
Exemplu de calcul
Generarea unui identificator cu acest instrument poate produce:
1vcpuhcj51eomj1o31dnlqopu0
2Aici, v este litera aleatorie de la început, iar cpuhcj51eomj1o31dnlqopu0 (24 de caractere) este corpul hash. Cele două părți arată diferit doar deoarece primul caracter este garantat a fi o literă — corpul hash poate conține un amestec de litere și cifre.
De ce folosesc sistemele CUID2
- Nu este necesară coordonarea. Orice mașină poate genera singură un identificator valid, fără să solicite următoarea valoare unui server central sau unei baze de date.
- Rezistență la coliziuni. Combinația dintre timp, contor, amprenta gazdei și entropia aleatorie face extrem de improbabil ca două mașini să producă același identificator, chiar și atunci când generează multe identificatoare pe secundă.
- Compatibil cu URL-urile. Un CUID2 folosește doar litere mici și cifre, astfel încât nu trebuie niciodată codificat pentru a fi utilizat într-o adresă web.
- Generare rapidă și privată. Deoarece acest instrument rulează generatorul în browser, identificatorii sunt creați instantaneu și nu părăsesc dispozitivul.
Identificatorii CUID2 nu pot fi sortați după momentul creării. Spre deosebire de un număr cu incrementare automată dintr-o bază de date sau de formatul CUID mai vechi (versiunea 1), un CUID2 ascunde marca temporală în hash în loc să o stocheze la vedere. Aplicațiile care trebuie să sorteze înregistrările după ordinea creării ar trebui să stocheze o coloană separată cu marca temporală, alături de identificator.
CUID2 comparat cu UUID și identificatorii cu incrementare automată
| Caracteristică | CUID2 | UUID v4 | Incrementare automată |
|---|---|---|---|
| Lungime | 25 de caractere | 36 de caractere (cu cratime) | Variază (de obicei, un număr scurt) |
| Set de caractere | Litere mici și cifre | Cifre hexazecimale și cratime | Cifre |
| Necesită coordonare centrală | Nu | Nu | Da (o secvență de bază de date) |
| Sortabil după momentul creării | Nu | Nu | Da |
| Compatibil cu URL-urile fără codificare | Da | Da | Da |
CUID2 și UUID v4 rezolvă aceeași problemă: generarea identificatorilor fără coordonare centrală. CUID2 este mai scurt și folosește un set mai mic de caractere, ceea ce îl face mai ușor de citit și de lipit într-un URL. Un UUID este, de asemenea, sigur într-o adresă web, deoarece cratima este un caracter ne rezervat în URL-uri, dar are cu 11 caractere mai mult.
Utilizări frecvente
- Chei primare în baze de date distribuite, unde mai multe servere inserează rânduri independent
- Identificatori de solicitare sau de urmărire folosiți pentru a urmări o acțiune prin mai multe microservicii
- Nume de fișiere pentru încărcări, astfel încât două fișiere să nu se suprascrie unul pe celălalt niciodată
- Identificatori de sesiune sau de token pentru aplicații web
- Identificatori de mesaje în cozi precum Kafka sau RabbitMQ
O scurtă istorie
Formatul CUID original a fost lansat de Eric Elliott în 2012 ca alternativă la UUID-uri pentru aplicații distribuite. CUID2, publicat de același proiect Paralleldrive, a reproiectat formatul în jurul unui hash criptografic și a eliminat marca temporală și contorul recuperabile pe care le expunea versiunea originală. Acest instrument generează numai identificatori CUID2.
Întrebări frecvente
Care este diferența dintre CUID (v1) și CUID2? CUID v1 stoca în identificator o marcă temporală și un contor vizibile, ceea ce făcea identificatorii sortabili, dar dezvăluia și când și câți identificatori fuseseră creați. CUID2 înlocuiește aceste câmpuri vizibile cu un hash într-un singur sens, astfel încât nicio informație nu poate fi citită din identificator.
Identificatorii CUID generați de acest instrument pot fi sortați după momentul creării? Nu. Un CUID2 nu are o marcă temporală recuperabilă, astfel încât identificatorii nu pot fi ordonați după momentul generării doar prin examinarea șirului.
Cât de lung este un identificator generat și poate fi schimbată lungimea? Acest instrument generează întotdeauna identificatori cu 25 de caractere. Instrumentul nu oferă nicio opțiune pentru solicitarea unei alte lungimi.
Pot două mașini diferite să genereze același CUID2 în același timp? Teoretic este posibil, dar extrem de improbabil în practică. Fiecare identificator combină o amprentă specifică gazdei cu entropie aleatoare, astfel încât este foarte puțin probabil ca mașini distincte să producă vreodată același hash.
Trimite acest instrument date către un server? Nu. Identificatorul este generat de JavaScript care rulează în browser, folosind ceasul sistemului local și valorile aleatorii furnizate de browser. Nimic nu este transmis.
Pot folosi un CUID2 drept cheie primară într-o bază de date?
Da. Identificatorii CUID2 funcționează bine ca chei primare în bazele de date distribuite, deoarece orice nod poate genera unul fără a verifica o secvență centrală. Ei nu sunt sortați în mod natural după momentul inserării, astfel încât o aplicație care are nevoie de această ordine ar trebui să păstreze o coloană separată created_at.