Sari la conținut

Generator UUID Gratuit - Creează UUID-uri V1 și V4 Instant

Generează identificatori unici instant cu generatorul nostru gratuit de UUID. Creează UUID-uri Versiunea 1 (bazate pe timp) și Versiunea 4 (aleatoare) pentru baze de date, API-uri și sisteme distribuite.

Generator UUID

Versiune UUID
UUID generat
Calculator de încărcare...
📚

Documentație

Generator de UUID-uri

Un generator de UUID-uri este un instrument care creează un identificator universal unic, sau UUID: un cod de 128 de biți folosit pentru a eticheta o informație, astfel încât niciun alt element, de oriunde, să nu aibă probabil aceeași etichetă. Această pagină generează UUID-uri de versiunea 1 (bazate pe timp) și de versiunea 4 (aleatorii).

Ce este un UUID?

Un UUID este un număr de 128 de biți scris cu 32 de cifre hexazecimale (caracterele 0–9 și a-f). Este împărțit în cinci grupuri separate prin cratime, după modelul 8-4-4-4-12, pentru un total de 36 de caractere. Un UUID de exemplu arată astfel:

1550e8400-e29b-41d4-a716-446655440000
2

UUID-urile sunt definite de RFC 9562, publicat de Internet Engineering Task Force în mai 2024, care a înlocuit RFC-ul mai vechi 4122 din 2005. Ambele documente descriu același format de 128 de biți. Software-ul le folosește pentru a identifica rânduri din baze de date, fișiere, sesiuni de utilizator și alte înregistrări, fără a avea nevoie de o autoritate centrală care să distribuie numere. Deoarece spațiul UUID-urilor posibile este atât de mare, două computere pot genera UUID-uri independent, în același moment, și aproape niciodată nu vor produce același UUID.

Formatul și structura UUID-ului

Cei 128 de biți ai unui UUID sunt împărțiți în câmpuri denumite. Fiecare câmp ocupă un număr fix de biți:

  • time_low – 32 de biți
  • time_mid – 16 de biți
  • time_hi_and_version – 16 de biți
  • clock_seq_hi_and_reserved – 8 biți
  • clock_seq_low – 8 biți
  • node – 48 de biți
Dispunerea câmpurilor UUID-ului time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Patru biți din time_hi_and_version conțin numărul versiunii UUID-ului, iar doi biți din clock_seq_hi_and_reserved conțin varianta, care îi indică software-ului cum să interpreteze restul câmpurilor. Sunt definite opt versiuni.

Numele câmpurilor de mai sus provin din versiunea 1, în care acestea conțin într-adevăr o valoare de timp și una de nod. Celelalte versiuni păstrează aceeași dispunere 8-4-4-4-12 și aceleași limite ale câmpurilor, dar completează majoritatea biților cu date aleatorii. Într-un UUID de versiunea 4, grupul etichetat time_low este aleatoriu, nu reprezintă un timp.

Cum se generează un UUID cu acest instrument

  1. Alegeți o versiune: versiunea 1 (bazată pe timp) sau versiunea 4 (aleatorie).
  2. Citiți UUID-ul din caseta cu rezultate. Unul nou apare imediat ce pagina se încarcă sau se schimbă versiunea.
  3. Selectați „Generează” pentru a obține un alt UUID.
  4. Selectați „Copiază” pentru a copia rezultatul în clipboard, apoi inserați-l în cod, într-o bază de date sau într-un fișier de configurare.

Panoul de sub rezultat împarte UUID-ul în cele cinci câmpuri și îl denumește pe fiecare, astfel încât cifra versiunii și cifra variantei să fie ușor de găsit.

Versiunea 4 este potrivită pentru majoritatea utilizărilor, inclusiv pentru chei de baze de date și tokenuri de sesiune, deoarece nu conține informații despre momentul sau locul creării. Versiunea 1 este potrivită pentru înregistrări al căror moment de creare trebuie recuperat din identificatorul însuși, cum ar fi intrările din jurnale.

Versiunea 1 a UUID-ului față de versiunea 4

Versiunea 1 codifică marca temporală curentă, împreună cu o secvență de ceas și o valoare de nod alese aleatoriu. Standardul permite ca valoarea nodului să fie adresa reală de rețea (MAC) a unui computer, dar permite și o valoare de nod generată aleatoriu, ca alternativă pentru protejarea confidențialității. Acest instrument folosește întotdeauna opțiunea aleatorie: UUID-urile sale de versiunea 1 nu citesc și nu expun niciodată o adresă MAC reală. Standardul impune, de asemenea, ca bitul cel mai puțin semnificativ al primului octet din câmpul nodului să fie setat la 1 pentru o valoare de nod aleatorie, iar acest instrument îl setează. Plăcile de rețea reale nu au niciodată acel bit setat, astfel încât un nod aleatoriu nu poate fi confundat cu unul real. De aceea, a doua cifră hexazecimală a celui de-al cincilea grup este întotdeauna impară într-un UUID de versiunea 1 de pe această pagină: 1, 3, 5, 7, 9, b, d sau f.

Marca temporală dintr-un UUID de versiunea 1 poate fi citită ulterior, astfel încât înregistrările pot fi ordonate după momentul creării. Sortarea textului UUID-ului în sine nu produce acest rezultat, deoarece primul grup conține cei mai puțin semnificativi 32 de biți ai mărcii temporale, care se reiau aproximativ la fiecare 7 minute. Versiunea 6, adăugată în RFC 9562, stochează aceeași marcă temporală cu biții cei mai semnificativi la început, astfel încât sortarea textului simplu să funcționeze.

Versiunea 4 este construită din biți aleatorii, cu câțiva biți fixați pentru a indica versiunea și varianta. Nu conține o marcă temporală sau date specifice mașinii, așadar nu dezvăluie când sau unde a fost creată. Nu poate fi sortată după ordinea creării.

În standard există alte șase versiuni, dar acest instrument nu le generează: versiunea 2 (DCE Security, utilizată rar); versiunile 3 și 5, construite prin aplicarea funcției hash unui spațiu de nume și unui nume cu MD5 sau SHA-1, astfel încât aceeași intrare produce întotdeauna același UUID; și versiunile 6, 7 și 8, adăugate de RFC 9562 în (24.300 cm) 2024 pentru identificatori sortabili și personalizați.

Cum se calculează un UUID (formulă)

Versiunea 4:

  1. Generați 128 de biți aleatorii.
  2. Setați cei patru biți ai versiunii, prima cifră hexazecimală a celui de-al treilea grup, la 0100 (hexazecimal 4).
  3. Setați cei mai semnificativi doi biți ai celui de-al patrulea grup la 10 (astfel, prima cifră hexazecimală a grupului este 8, 9, a sau b).

Doar 122 dintre cei 128 de biți sunt efectiv aleatori, deoarece 6 biți sunt fixați de pașii 2 și 3. Rezultă 2^122, adică aproximativ 5,3 × 10^36 UUID-uri posibile de versiunea 4.

Versiunea 1:

  1. Luați timpul curent ca număr de intervale de 100 de nanosecunde de la 15 octombrie 1582, data reformei calendarului gregorian. În practică, acesta este timpul Unix obișnuit în milisecunde plus 12.219.292.800.000, totul înmulțit cu 10.000.
  2. Împărțiți numărul de 60 de biți în trei câmpuri: cei mai puțin semnificativi 32 de biți intră în time_low, următorii 16 în time_mid, iar primii 12 în time_hi_and_version.
  3. Generați o secvență de ceas de 14 biți, utilizată pentru a evita coliziunile dacă ceasul sistemului este dat înapoi.
  4. Generați o valoare de nod de 48 de biți, cu bitul cel mai puțin semnificativ al primului său octet setat la 1.
  5. Setați biții versiunii la 0001 și biții variantei la 10.

Pentru toate versiunile UUID, spațiul complet de 128 de biți conține 2^128, adică aproximativ 3,4 × 10^38, valori posibile. Numărul este atât de mare, încât coliziunile aleatorii nu reprezintă o problemă practică.

Exemplu rezolvat

Citirea unui UUID de versiunea 4. Luați exemplul prezentat anterior: 550e8400-e29b-41d4-a716-446655440000.

  • Al treilea grup, 41d4: prima cifră este 4, indicând că acesta este un UUID de versiunea 4.
  • Al patrulea grup, a716: prima cifră, a (binar 1010), începe cu 10, biții de variantă necesari.
  • Cifrele hexazecimale rămase reprezintă încărcătura aleatorie.

Un program care citește acest UUID verifică modelul 4 și 10 pentru a confirma formatul, apoi tratează restul ca pe o valoare aleatorie opacă.

Construirea unui UUID de versiunea 1. Să presupunem că ceasul indică 1.700.000.000.000 milisecunde de timp Unix, adică 14 noiembrie 2023, 22:13:20 UTC.

  1. Adăugați decalajul: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Înmulțiți cu 10.000 pentru a obține intervale de 100 de nanosecunde: 139,192,928,000,000,000. În hexazecimal, acesta este 01EE833B04AFC000.
  3. Împărțiți-l: time_low = 04AFC000 (cele mai puțin semnificative 8 cifre hexazecimale), time_mid = 833B (următoarele 4), iar primii 12 biți sunt 1EE.
  4. Puneți cifra versiunii 1 înaintea lui 1EE, obținând time_hi_and_version = 11EE.

UUID-ul este atunci 04afc000-833b-11ee- urmat de secvența de ceas și valoarea nodului. Software-ul poate inversa acești patru pași pentru a recupera 14 noiembrie 2023 din identificator.

Utilizări obișnuite ale UUID-urilor

  • Chei primare în baze de date, mai ales atunci când mai multe servere creează înregistrări simultan fără să se consulte între ele.
  • Tokenuri de sesiune și chei API, de obicei de versiunea 4, pentru confidențialitatea pe care o oferă.
  • Identificatori pentru fișiere, evenimente și resurse în sisteme distribuite, precum microserviciile.
  • ID-uri de dispozitiv în rețele IoT mari, în care fiecare dispozitiv își poate genera propriul ID offline.

Principalul compromis este dimensiunea: un UUID ocupă 16 octeți de stocare, față de 4 sau 8 octeți pentru un simplu contor întreg, iar unele baze de date indexează UUID-urile mai lent decât numerele întregi secvențiale.

Alternative la UUID-uri

Numerele întregi cu incrementare automată sunt mai mici și mai simple, dar nu funcționează bine când mai mult de un server trebuie să distribuie ID-uri independent. ID-urile Snowflake, dezvoltate la Twitter, combină un marcaj temporal cu identificatorul unui lucrător pentru a produce identificatori compacți și sortabili într-un sistem distribuit. ULID-urile (identificatori universal unici sortabili lexicografic) sunt un format mai nou, conceput să fie atât aleatoriu, cât și sortabil după momentul creării, spre deosebire de un UUID standard de versiunea 4.

Istoricul standardului UUID

Conceptul UUID a apărut în anii 1980 la Apollo Computer, ca parte a Network Computing System. Ulterior, Open Software Foundation a adoptat formatul pentru Distributed Computing Environment. Internet Engineering Task Force a publicat RFC 4122 în 2005 și l-a înlocuit cu RFC 9562 în mai 2024. RFC 9562 păstrează toate versiunile anterioare funcționale fără modificări și adaugă versiunile 6, 7 și 8.

Întrebări frecvente

La ce se folosește un generator de UUID? Creează identificatori unici pentru baze de date, sisteme distribuite, tokenuri de sesiune, chei API și ID-uri de dispozitiv, astfel încât două înregistrări să nu fie nevoite să partajeze același identificator.

Care este diferența dintre UUID v1 și v4? Versiunea 1 codifică o marcă temporală pe care software-ul o poate citi pentru a recupera momentul creării. Versiunea 4 este complet aleatorie și nu conține o marcă temporală. Rezultatul de versiunea 1 al acestui instrument folosește o valoare de nod generată aleatoriu, nu o adresă MAC reală, astfel încât nu expune nici informații de identificare a mașinii.

Expune versiunea 1 adresa mea MAC? Nu cu acest instrument. Standardul permite ca un câmp de nod al unui UUID de versiunea 1 să conțină o adresă MAC reală, dar acest generator completează întotdeauna acel câmp cu biți aleatorii și setează bitul care indică faptul că valoarea nu este o adresă de rețea reală.

UUID-urile au unicitatea garantată? Nicio schemă de identificatori nu poate garanta unicitatea absolută, dar spațiul de 128 de biți conține aproximativ 3,4 × 10^38 valori posibile, iar un UUID de versiunea 4 are aproximativ 5,3 × 10^36 valori aleatorii posibile. Probabilitatea unui duplicat este suficient de mică pentru a putea fi ignorată în aproape orice utilizare practică.

Pot folosi un UUID ca cheie primară într-o bază de date? Da. UUID-urile funcționează bine ca chei primare în sistemele distribuite, deoarece orice nod poate genera unul fără să consulte un server central. Costul este de 16 octeți de stocare pentru fiecare cheie, mai mult decât pentru un număr întreg obișnuit, precum și o performanță potențial mai lentă a indexului în tabele foarte mari.

Este un UUID același lucru cu un GUID? Da. GUID (identificator global unic) este denumirea Microsoft pentru același concept definit de RFC 4122 ca UUID.

UUID-urile de versiunea 4 pot fi sortate după momentul creării? Nu. UUID-urile de versiunea 4 sunt aleatorii, astfel încât nu conțin informații despre momentul creării. Un UUID de versiunea 1 conține această informație, dar trebuie mai întâi decodificat; sortarea textului nu produce ordinea creării. Versiunea 6, versiunea 7 și ULID-urile sunt concepute pentru a fi sortate direct ca text.

Referințe

  1. Davis, K., Peabody, B. și Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. și Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Identificator universal unic. În Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID Snowflake. În Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Specificația ULID. GitHub. https://github.com/ulid/spec