Besplatni UUID Generator - Trenutno kreirajte V1 i V4 UUID-ove
Trenutno generirajte jedinstvene identifikatore pomoću našeg besplatnog UUID generatora. Kreirajte verziju 1 (vremenski temeljene) i verziju 4 (nasumične) UUID-ove za baze podataka, API-je i distribuirane sustave.
Generator UUID-a
Dokumentacija
Generator UUID-ova
Generator UUID-ova alat je koji stvara univerzalno jedinstveni identifikator, odnosno UUID: kod od 128 bitova koji se upotrebljava za označavanje podatka kako nijedna druga stavka, bilo gdje, vjerojatno ne bi imala istu oznaku. Ova stranica generira UUID-ove verzije 1 (utemeljene na vremenu) i verzije 4 (nasumične).
Što je UUID?
UUID je broj od 128 bitova zapisan kao 32 heksadecimalne znamenke (znakovi 0–9 i a–f). Podijeljen je u pet skupina odvojenih crticama, prema obrascu 8-4-4-4-12, što ukupno čini 36 znakova. UUID primjerice izgleda ovako:
1550e8400-e29b-41d4-a716-446655440000
2UUID-ovi su definirani dokumentom RFC 9562, koji je Radna skupina za internetsko inženjerstvo objavila u svibnju 2024 i koji je zamijenio stariji RFC 4122 iz 2005. Oba dokumenta opisuju isti format od 128 bitova. Softver ih upotrebljava za identifikaciju redaka u bazama podataka, datoteka, korisničkih sesija i drugih zapisa, bez potrebe za središnjim tijelom koje bi dodjeljivalo brojeve. Budući da je prostor mogućih UUID-ova vrlo velik, dva računala mogu neovisno generirati UUID-ove u istom trenutku i gotovo nikad neće proizvesti isti UUID.
Format i struktura UUID-a
128 bitova UUID-a podijeljeno je u imenovana polja. Svako polje zauzima fiksan broj bitova:
time_low– 32 bitatime_mid– 16 bitovatime_hi_and_version– 16 bitovaclock_seq_hi_and_reserved– 8 bitovaclock_seq_low– 8 bitovanode– 48 bitova
Četiri bita unutar polja time_hi_and_version sadrže broj verzije UUID-a, a dva bita unutar polja clock_seq_hi_and_reserved sadrže varijantu, koja softveru govori kako čitati preostala polja. Definirano je osam verzija.
Nazivi polja iznad potječu iz verzije 1, u kojoj ona doista sadrže vrijednost vremena i čvora. Druge verzije zadržavaju isti raspored 8-4-4-4-12 i iste granice polja, ali većinu bitova popunjavaju nasumičnim podacima. U UUID-u verzije 4 skupina označena kao time_low nasumična je, a ne vremenska.
Kako generirati UUID ovim alatom
- Odaberite verziju: verziju 1 (utemeljenu na vremenu) ili verziju 4 (nasumičnu).
- Pročitajte UUID u okviru s rezultatom. Novi se UUID pojavljuje čim se stranica učita ili se promijeni verzija.
- Odaberite „Generate” za generiranje novog UUID-a.
- Odaberite „Copy” da biste rezultat kopirali u međuspremnik, a zatim ga zalijepite u kôd, bazu podataka ili konfiguracijsku datoteku.
Ploča ispod rezultata dijeli UUID na njegovih pet polja i imenuje svako od njih, pa je znamenke verzije i varijante lako pronaći.
Verzija 4 prikladna je za većinu namjena, uključujući ključeve baza podataka i tokene sesija, jer ne sadrži podatke o tome kada je ni gdje je izrađena. Verzija 1 prikladna je za zapise čije vrijeme nastanka mora biti moguće utvrditi iz samog identifikatora, primjerice unose u zapisniku.
UUID verzija 1 u odnosu na verziju 4
Verzija 1 kodira trenutačnu vremensku oznaku te nasumično odabrani slijed takta i vrijednost čvora. Standard dopušta da vrijednost čvora bude stvarna mrežna adresa računala (MAC), ali dopušta i nasumično generiranu vrijednost čvora kao alternativu koja štiti privatnost. Ovaj alat uvijek upotrebljava nasumičnu mogućnost: njegovi UUID-ovi verzije 1 nikad ne čitaju ni ne otkrivaju stvarnu MAC adresu. Standard također zahtijeva da najmanji bit prvog bajta polja čvora bude postavljen na 1 kod nasumične vrijednosti čvora, a ovaj ga alat postavlja. Stvarne mrežne kartice nikad nemaju postavljen taj bit, pa se nasumični čvor ne može zamijeniti za stvarni. Zato je druga heksadecimalna znamenka pete skupine u UUID-u verzije 1 s ove stranice uvijek neparna: 1, 3, 5, 7, 9, b, d ili f.
Vremenska oznaka unutar UUID-a verzije 1 može se ponovno pročitati, pa se zapisi mogu poredati prema vremenu nastanka. Samo sortiranje teksta UUID-a to ne omogućuje jer prva skupina sadrži najmanjih 32 bitova vremenske oznake, koji se vraćaju na početak otprilike svakih 7 minuta. Verzija 6, dodana u RFC 9562, pohranjuje istu vremensku oznaku tako da su najviši bitovi prvi, pa sortiranje običnog teksta funkcionira.
Verzija 4 sastoji se od nasumičnih bitova, uz nekoliko bitova fiksiranih za označavanje verzije i varijante. Ne sadrži vremensku oznaku ni podatke specifične za računalo, pa ne otkriva kada ni gdje je izrađena. Ne može se sortirati prema vremenu nastanka.
U standardu postoji još šest verzija, ali ovaj ih alat ne generira: verzija 2 (DCE Security, rijetko se upotrebljava); verzije 3 i 5, izrađene raspršivanjem prostora imena i naziva pomoću MD5 ili SHA-1, tako da isti ulaz uvijek daje isti UUID; te verzije 6, 7 i 8, dodane RFC-om 9562 u (24.300 cm) 2024 za sortirajuće i prilagođene identifikatore.
Kako izračunati UUID (formula)
Verzija 4:
- Generirajte 128 nasumičnih bitova.
- Postavite četiri bita verzije, prvu heksadecimalnu znamenku treće skupine, na
0100(heks.4). - Postavite gornja dva bita četvrte skupine na
10(tako da je prva heksadecimalna znamenka te skupine8,9,ailib).
Samo je 122 od 128 bitova zapravo nasumično jer je 6 bitova fiksirano koracima 2 i 3. To daje 2^122, odnosno približno 5,3 × 10^36 mogućih UUID-ova verzije 4.
Verzija 1:
- Uzmite trenutačno vrijeme kao broj intervala od 100 nanosekundi od 15. listopada 1582., datuma reforme gregorijanskog kalendara. U praksi je to uobičajeno Unixovo vrijeme u milisekundama uvećano za 12.219.292.800.000, a zatim sve pomnoženo s 10.000.
- Podijelite taj broj od 60 bitova na tri polja: najmanjih 32 bitova ide u
time_low, sljedećih 16 utime_mid, a najviših 12 utime_hi_and_version. - Generirajte slijed takta od 14 bitova, koji se upotrebljava za izbjegavanje kolizija ako je sistemski sat vraćen unatrag.
- Generirajte vrijednost čvora od 48 bitova, pri čemu najmanji bit njegova prvog bajta postavite na 1.
- Postavite bitove verzije na
0001, a bitove varijante na10.
U svim verzijama UUID-a puni prostor od 128 bitova sadržava 2^128, odnosno približno 3,4 × 10^38 mogućih vrijednosti. Taj je broj toliko velik da nasumične kolizije nisu praktična briga.
Primjer s rješenjem
Čitanje UUID-a verzije 4. Uzmimo raniji primjer: 550e8400-e29b-41d4-a716-446655440000.
- Treća skupina,
41d4: prva znamenka je4, što označava da je riječ o UUID-u verzije 4. - Četvrta skupina,
a716: prva znamenka,a(binarno1010), počinje s10, obaveznim bitovima varijante. - Preostale heksadecimalne znamenke čine nasumični sadržaj.
Program koji čita ovaj UUID provjerava uzorak 4 i 10 kako bi potvrdio format, a zatim ostatak tretira kao neprozirnu nasumičnu vrijednost.
Izrada UUID-a verzije 1. Pretpostavimo da sat pokazuje 1.700.000.000.000 milisekundi Unixova vremena, što odgovara 14. studenoga 2023. u 22:13:20 UTC-u.
- Dodajte pomak: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
- Pomnožite s 10.000 da biste dobili intervale od 100 nanosekundi: 139,192,928,000,000,000. U heksadecimalnom obliku to je
01EE833B04AFC000. - Podijelite ga:
time_low=04AFC000(najnižih 8 heksadecimalnih znamenki),time_mid=833B(sljedeće 4), a najviših 12 bitova jest1EE. - Stavite znamenku verzije
1ispred1EE, čime dobivatetime_hi_and_version=11EE.
UUID tada glasi 04afc000-833b-11ee-, nakon čega slijede slijed takta i vrijednost čvora. Softver može obrnuti ta četiri koraka i iz identifikatora ponovno dobiti 14. studenoga 2023..
Uobičajene primjene UUID-ova
- Primarni ključevi u bazama podataka, osobito kada više poslužitelja istodobno stvara zapise bez međusobne koordinacije.
- Tokeni sesija i ključevi API-ja, obično verzija 4 zbog zaštite privatnosti koju pruža.
- Identifikatori datoteka, događaja i resursa u distribuiranim sustavima, kao što su mikrousluge.
- ID-ovi uređaja u velikim IoT mrežama, gdje svaki uređaj može izvanmrežno generirati vlastiti ID.
Glavni je nedostatak veličina: UUID zauzima 16 bajtova prostora za pohranu, u usporedbi s 4 ili 8 bajtova za jednostavni cjelobrojni brojač, a neke baze podataka indeksiraju UUID-ove sporije od uzastopnih cijelih brojeva.
Alternative UUID-ovima
Cijeli brojevi s automatskim povećavanjem manji su i jednostavniji, ali ne funkcioniraju dobro kada više od jednog poslužitelja treba neovisno dodjeljivati ID-ove. Snowflake ID-ovi, koje je razvila tvrtka Twitter, kombiniraju vremensku oznaku s ID-om radnika kako bi proizveli kompaktne identifikatore koje je moguće sortirati u distribuiranom sustavu. ULID-ovi (univerzalno jedinstveni leksikografski sortirajući identifikatori) noviji su format osmišljen tako da bude i nasumičan i sortiran prema vremenu nastanka, za razliku od standardnog UUID-a verzije 4.
Povijest standarda UUID-a
Koncept UUID-a nastao je 1980-ih u tvrtki Apollo Computer, kao dio njezina sustava Network Computing System. Open Software Foundation kasnije je prihvatila format za svoje distribuirano računalno okruženje. Radna skupina za internetsko inženjerstvo objavila je RFC 4122 u (10.500 cm) 2005, a zamijenila ga RFC-om 9562 u svibnju 2024. RFC 9562 zadržava sve ranije verzije nepromijenjenima i dodaje verzije 6, 7 i 8.
Često postavljana pitanja
Čemu služi generator UUID-ova? Stvara jedinstvene identifikatore za baze podataka, distribuirane sustave, tokene sesija, ključeve API-ja i ID-ove uređaja, tako da dva zapisa ne moraju dijeliti isti identifikator.
Koja je razlika između UUID-a v1 i v4? Verzija 1 kodira vremensku oznaku koju softver može ponovno pročitati kako bi utvrdio vrijeme nastanka. Verzija 4 potpuno je nasumična i ne sadrži vremensku oznaku. Izlaz verzije 1 ovog alata upotrebljava nasumično generiranu vrijednost čvora umjesto stvarne MAC adrese, pa ne otkriva ni podatke koji identificiraju računalo.
Otkriva li verzija 1 moju MAC adresu? Ne s ovim alatom. Standard dopušta da polje čvora UUID-a verzije 1 sadržava stvarnu MAC adresu, ali ovaj generator to polje uvijek popunjava nasumičnim bitovima i postavlja bit koji označava da vrijednost nije stvarna mrežna adresa.
Jesu li UUID-ovi zajamčeno jedinstveni? Nijedna shema identifikatora ne može jamčiti apsolutnu jedinstvenost, ali prostor od 128 bitova sadržava približno 3,4 × 10^38 mogućih vrijednosti, a UUID verzije 4 ima približno 5,3 × 10^36 mogućih nasumičnih vrijednosti. Vjerojatnost duplikata dovoljno je mala da se može zanemariti u gotovo svakoj praktičnoj primjeni.
Mogu li UUID upotrijebiti kao primarni ključ baze podataka? Da. UUID-ovi dobro funkcioniraju kao primarni ključevi u distribuiranim sustavima jer ih svaki čvor može generirati bez provjere sa središnjim poslužiteljem. Cijena je 16 bajtova prostora za pohranu po ključu, što je više od uobičajenog cijelog broja, te potencijalno sporije indeksiranje u vrlo velikim tablicama.
Je li UUID isto što i GUID? Da. GUID (globalno jedinstveni identifikator) Microsoftov je naziv za isti koncept definiran RFC-om 4122 kao UUID.
Mogu li se UUID-ovi verzije 4 sortirati prema vremenu nastanka? Ne. UUID-ovi verzije 4 nasumični su pa ne sadrže podatak o tome kada su nastali. UUID verzije 1 taj podatak sadrži, ali prvo ga treba dekodirati; sortiranje teksta ne daje redoslijed nastanka. Verzija 6, verzija 7 i ULID-ovi osmišljeni su za izravno sortiranje kao tekst.
Reference
- Davis, K., Peabody, B. i Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. i Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Univerzalno jedinstveni identifikator. U Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. U Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- Specifikacija ULID-a. GitHub. https://github.com/ulid/spec