Ce este un UUID?
Un UUID (Identificator Universal Unic) este o valoare de 128 de biți redată ca un șir de 36 de caractere precum 550e8400-e29b-41d4-a716-446655440000. Formatul și semantica versiunii sunt definite de RFC 4122 pentru v1 până la v5 și de RFC 9562 pentru versiunile mai noi v6, v7 și v8. Acest instrument generează v4 (pur aleator), v1 (timestamp plus ID de nod aleator) și v7 (prefix timestamp în milisecunde Unix plus sufix aleator, sortabil după timpul de generare) — totul în browserul tău, folosind API-ul Web Crypto al platformei. Nicio dată nu este trimisă la un server.
Cum funcționează generarea UUID-urilor?
Fiecare versiune face compromisuri diferite între determinism, sortabilitate și entropie. Instrumentul alege algoritmul potrivit pe baza selecției tale:
- v4 (aleator) apelează
crypto.randomUUID()al browserului, care returnează 122 de biți de caracter aleator criptografic cu cei 6 biți fixes (versiunea0100și varianta10) setați în pozițiile corecte. Coliziunile sunt astronomic de improbabile — ar trebui să generezi aproximativ 2,71 chintilioane de UUID-uri v4 pentru a avea o singură duplicare cu o probabilitate de 50%. - v1 (timestamp + nod) împachetează un timestamp Gregorian de 60 de biți (tick-uri de 100 de nanosecunde de la 1582-10-15) în
time_low/time_mid/time_hi_and_version, setează nibble-ul versiunii la0001, alege o secvență de ceas de 14 biți cu biții de variantă setați și folosește un ID de nod aleator de 48 de biți cu bitul multicast forțat (RFC 4122 §4.5 permite explicit un ID de nod aleator când nu este disponibil un MAC hardware — bitul multicast îl marchează ca non-MAC). - v7 (timestamp sortabil), conform RFC 9562 §5.7, aranjează un timestamp Unix în milisecunde de 48 de biți în big-endian, apoi versiunea de 4 biți
0111, apoi 12 biți aleatori, apoi varianta de 2 biți10, apoi încă 62 de biți aleatori. Deoarece timestamp-ul este în cei mai semnificativi biți, UUID-urile v7 se sortează lexicografic în ordinea generării — o proprietate pe care nicio altă versiune UUID nu o oferă fără codificare suplimentară. - Toată caracterul aleator provine din
crypto.getRandomValues(), RNG-ul criptografic sigur al browserului. Atât v1, cât și v7 includ o gardă monotonă intra-tick, astfel încât două apeluri consecutive în aceeași fracțiune de secundă sortează totuși al doilea deasupra primului — important pentru rulările de generare în lot care concurează cu ceasul milisecundei. - Pipeline-ul de formatare rulează după generare. Poți elimina cratimele, comuta la majuscule, înfășura valoarea în acolade (
{…}— convenția Microsoft GUID) sau reda cei 16 octeți bruti ca base64 (ieșire de 22 de caractere, fără padding). Modul base64 anulează celelalte opțiuni de formatare, deoarece base64 este propria sa reprezentare.
De ce să folosești acest generator UUID?
- Nimic nu părăsește browserul tău. API-ul Web Crypto rulează local; pagina nu face nicio cerere de rețea după încărcarea inițială a documentului. Deschide DevTools, dă clic pe Generează, iar panoul Rețea rămâne tăcut.
- Rezultat corect conform RFC. v4 urmează RFC 4122 §4.4, v1 urmează §4.2 și §4.5, iar v7 urmează RFC 9562 §5.7. Nibble-ul versiunii și biții de variantă sunt plasați acolo unde standardele spun că trebuie să fie — fiecare UUID se validează împotriva expresiei regulate canonice a versiunii.
- v7 sortabil pentru chei de bază de date. Un UUID v7 folosit ca cheie primară grupată în Postgres, MySQL sau SQL Server menține inserțiile append-only pe index — fără page splits, fără I/O aleator — fiind în același timp global unic. v4 nu poate face acest lucru deoarece biții săi sunt aleatori.
- Generare în lot fără limite de rată. Generează 1, 10, 100 sau 1.000 de UUID-uri odată. Nu există cotă și nicio înregistrare — instrumentul rulează în fila ta, așa că limita este CPU-ul tău, nu un nivel API al unui furnizor.
Care sunt aplicațiile comune ale UUID-urilor?
UUID-urile apar oriunde un sistem are nevoie de un identificator global unic fără a se coordona cu o autoritate centrală:
- Chei primare de bază de date. Numerele auto-incrementate dezvăluie numărul de rânduri și sparg sharding-ul. UUID-urile sunt stabile între shard-uri, sigure de îmbinat între regiuni și (cu v7) mențin inserțiile B-tree fierbinți fără page splits. O aplicație tipică generează UUID-ul pe partea client, îl trimite în inserție și nu mai trebuie să facă un drum dus-întors la server pentru cheie.
- ID-uri de corelare a cererilor. Middleware-ul HTTP atașează un UUID v4 fiecărei cereri primite, îl înregistrează pe fiecare span și îl propagă în aval (adesea ca antetul
X-Request-Id). Când un client raportează o eroare, inginerul de suport lipește ID-ul și întreaga urmă a cererii apare — între servicii și fusuri orare — fără ambiguitate. - Chei de idempotență. API-urile de plată (Stripe, Adyen, Square) acceptă un antet
Idempotency-Keypentru ca o cerere reîncercată să nu taxeze clientul de două ori. Un UUID generat de client garantează că cheia este unică per operațiune logică, ceea ce este contractul pe care aceste API-uri îl cer.
Cum arată un exemplu de UUID?
În Node.js sau într-un browser modern, comanda pe o singură linie crypto.randomUUID() returnează un UUID v4 proaspăt — de exemplu 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Folosește-l pentru un ID de cerere sau o cheie de idempotență. Când UUID-ul merge într-o coloană de bază de date care va fi cheia primară grupată, generează v7: două valori v7 produse la o milisecundă diferență, precum 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 și 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, se sortează lexicografic în ordinea generării. Tipul uuid al Postgres-ului stochează ambele versiuni identic — diferența se vede la momentul scrierii indexului, unde inserțiile v7 se adaugă la dreapta B-tree-ului, în timp ce inserțiile v4 se împrăștie și forțează I/O aleator.
Acest Generator UUID face o singură treabă: transformă un clic în unul sau mai mulți identificatori conformi cu RFC, formatat așa cum ai nevoie, fără a trimite cererea ta la un server. Alege o versiune, alege o cantitate, alege un format — generează, copiază, mergi mai departe.