Trebate identifikator koji se neće poklapati s nekim drugim koji je neko napravio, na mašini za koju nikada niste čuli, a da ne morate nikoga pitati za dozvolu? Upravo to je zadatak UUID-a. To je 128-bitni broj, zapisan kao 36 znakova u poznatom formatu 8-4-4-4-12, a cijeli njegov dizajn se zasniva na tome da nikoja dva neće biti ista iako ništa ne koordinira ko dobija koji. Ovaj besplatni generator ih stvara u vašem pregledniku: odaberite verziju u polju Verzija, navedite koliko vam ih treba u polju Broj i pritisnite Generiši. Stranica se otvara sa jednim v4 — verzijom koju većina projekata traži, tako da ste samo jedan klik udaljeni od prvog identifikatora.
Svaki identifikator kreira vaš preglednik pomoću Web Crypto API-ja. Verzija 4 koristi crypto.randomUUID() tamo gdje to preglednik nudi i crypto.getRandomValues() u ostalim slučajevima — kriptografski siguran izvor slučajnosti, umjesto JavaScript pseudo-slučajne funkcije kao što je Math.random(). Verzija 7 stavlja 48-bitnu vremensku oznaku (u milisekundama) na početak, zatim 12-bitni brojač koji se povećava u okviru iste milisekunde, i na kraju 62 slučajna bita. To je metoda redoslijeda opisana u RFC 9562; zbog tog brojača serija od hiljadu komada izlazi po redu, a ne izmiješana. Verzija 1 kombinuje vremensku oznaku sa slučajnim identifikatorom čvora koji ima postavljen multicast bit, tako da nikada ne nosi adresu vaše mrežne kartice kao što su to radile originalne implementacije iz 1990-ih. Verzije 3 i 5 uopšte nisu slučajne: one kreiraju hash imenskog prostora zajedno sa imenom, koristeći MD5 odnosno SHA-1, a to heširanje se također odvija na vašem uređaju. Ništa se ne šalje na server, ništa se ne zapisuje u logove, i kada se stranica učita, nastavlja raditi i bez internet veze.
Verzija je polje koje određuje sve ostalo. Verzija 4 se sastoji od 122 slučajna bita i nema strukturu — to je zadana opcija i pravi izbor kada identifikator samo treba biti jedinstven. Verzija 7 zadržava 62 slučajna bita, ali počinje sa vremenom kada je kreirana, pa se njihov niz sortira po redoslijedu nastanka; zbog toga je ovo verzija koja se bira kada identifikator postaje ključ u bazi podataka. Verzija 1 je originalna šema zasnovana na vremenu, zadržana ovdje za sisteme koji je i dalje traže. Verzije 3 i 5 su specifičan par: one su determinističke, što znači da isti ulazni podaci uvijek proizvode isti identifikator. One zahtijevaju dva dodatna polja — Imenski prostor, koji je jedan od standardnih prostora DNS, URL, OID i X.500 ili vaš Vlastiti imenski prostor (UUID), i Ime — niz znakova koji se identificira. Dajte verziji 5 imenski prostor URL i https://example.com/a, i dobit ćete isti UUID danas, sutra i na tuđoj mašini. Iz tog razloga polje Broj nestaje kada se odabere v3 ili v5: hiljadu kopija jedne determinističke vrijednosti bile bi samo hiljadu kopija jedne determinističke vrijednosti. Za sve ostale verzije polje Broj ide od 1 do 1000.
Četiri prekidača mijenjaju izgled rezultata bez mijenjanja 128 bitova ispod. Velika slova ispisuje heksadecimalne cifre velikim pismom, Bez crtica daje kompaktnu formu od 32 znaka koju preferiraju određene kolone i imena datoteka, dok Vitičaste zagrade obavija vrijednost u { } — format koji Windows i .NET svijet nazivaju GUID. Pod Napredne opcije, opcija urn:uuid: dodaje prefiks koji od njega pravi službeni URN; ona isključuje zagrade i formu bez crtica kada je uključena, jer standard dopušta tačno jednu URN formu i to je kanonska forma sa crticama. Format za kopiranje određuje kako se spaja serija kada je kopirate: po jedan u svakom redu, razdvojeni zarezima, ili svaka vrijednost pod navodnicima sa zarezom na kraju, što je spremno za direktno ubacivanje u niz u kodu. Ispod rezultata nalazi se red koji prikazuje slučajnost u bitovima — 122 za v4, 62 za v7 — i, za v7, vremensku oznaku kodiranu u prvom identifikatoru serije, tako da je vrijeme unutar vrijednosti vidljivo umjesto da se pretpostavlja. Kopiraj sve i Sačuvaj u datoteku poštuju odabrani Format za kopiranje. Historija čuva vaših zadnjih 10 serija u vašem pregledniku: kliknite na neku da je vratite, kopirajte ili izbrišite pojedinačan unos, ili očistite cijelu listu. Očisti prazni rezultat i ne dira vaše postavke, a preko 50 identifikatora lista postaje jedan blok sa klizačem umjesto pedeset pojedinačnih redova.
Najvažnija stvar na ovoj stranici je razlika između v4 i v7 kao primarnog ključa (primary key) i to nije pitanje ukusa. Indeksi u bazama podataka su stabla (poput B-tree) koja se drže u sortiranom redoslijedu, i mjesto gdje novi ključ pada u taj redoslijed određuje koliko posla zahtijeva unos. Ključ v4 je slučajan, tako da uzastopni unosi padaju u nepovezane dijelove indeksa: stranice (pages) koje su bile pune se cijepaju (page split), dijelovi stabla koje baza podataka drži u memoriji rijetko su oni koji će trebati za sljedeći unos, a indeks na kraju postaje veći i fragmentiraniji nego što to zahtijevaju redovi na koje pokazuje. Ključ v7 počinje sa trenutnom milisekundom, tako da uzastopni unosi padaju jedni pored drugih na desnom kraju stabla, što je obrazac koji stvara automatski inkrementirajući cijeli broj i obrazac oko kojeg su izgrađene strukture indeksa. To je taj kompromis: v7 vam daje ponašanje unosa sekvencijalnog ključa uz zadržavanje osobine zbog koje ste prvobitno izabrali UUID-ove, a to je da ga svako može stvoriti bez pitanja servera. Ono što to košta jeste da je vrijeme kreiranja sada čitljivo unutar identifikatora, a da li je to važno je pitanje o vašim podacima, a ne o formatu.
Ništa nikada ne provjerava UUID na jedinstvenost; njegova veličina je garancija. Nema nikakvog registra, povratnog putovanja do servera, pretrage — generator proizvodi broj i predaje ga, a razlog zbog kojeg se dva od njih ne sudaraju je jednostavno taj što postoji 2^122 mogućih v4 vrijednosti, odnosno oko 5,3 sekstiliona. Paradoks rođendana je pošten način za dimenzionisanje toga: trebalo bi vam otprilike 2,7 triliona identifikatora prije nego što bi postojala jednaka šansa da se bilo koja dva podudaraju, što znači milijardu novih UUID-ova svake sekunde tokom 86 godina. Vrijedi biti precizan o tome šta to obećava, a šta ne. To je statistička garancija, a ne aritmetička, i važi samo dok je slučajnost ispod nje stvarna — loše inicijaliziran generator ili virtuelna mašina klonirana zajedno sa svojim bazenom entropije ruše je na način koji format ne može otkriti. Verzija 7 još više sužava to pitanje: unutar jedne milisekunde jedan generator se uopšte ne može ponoviti, jer se brojač povećava umjesto da baca kockice, a kroz nezavisne generatore 62 slučajna bita odrađuju posao.
UUID je identifikator, a ne lozinka. Verzija 4 je nepredvidiva, a to dovodi ljude u iskušenje da je tretiraju kao tajnu — link za resetovanje lozinke, nepredvidiv URL, sesijski token, API ključ. Nepredvidivost je stvarna, ali tajnost je svojstvo načina na koji se postupa sa vrijednošću, a identifikatori se po dizajnu tretiraju nepažljivo: oni se nalaze u URL-ovima, koji završavaju u historiji preglednika, serverskim zapisima, zaglavljima referrer i analitici, te se ubacuju u poruke u chatovima. Ostale verzije su još gori kandidati. Verzija 1 i verzija 7 kodiraju trenutak nastanka, pa svako ko ga ima zna otprilike kada je napravljen i može suziti krug svega što je napravljeno oko njega. Verzije 3 i 5 su namjerno determinističke: v5 UUID email adrese nije heširana tajna, to je vrijednost koju svako sa istom adresom može izračunati za sekundu. Koristite UUID da biste imenovali stvari. Koristite generator lozinki ili token iz biblioteke napravljene za tajne, kada vrijednost mora ostati nepoznata.
Zašto odabrati ovaj UUID generator?
- Generisanje samo u pregledniku: identifikatori se prave na vašem uređaju i nikada se nigdje ne šalju
- Web Crypto API slučajnost: kriptografski sigurna, a ne Math.random()
- Pet verzija na jednom mjestu: v1, v3, v4, v5 i v7, bez mijenjanja alata
- Istinski redoslijed v7: brojač unutar milisekunde, kako opisuje RFC 9562
- Deterministički v3 i v5 sa četiri standardna imenska prostora ili vašim vlastitim
- Do 1000 odjednom, s kompaktnom listom koja se lista nakon pedeset
- Svi uobičajeni oblici: sa crticama, goli, velika slova, u zagradama ili urn:uuid: URN
- Kopiranje kao redovi, sa zarezima ili pod navodnicima što se lijepi pravo u kod
- Bez ograničenja i besplatno: bez registracije, bez limita korištenja, ništa na našim serverima
UUID-ovi se pojavljuju gdje god se nečemu mora dati ime prije nego što bilo šta može potvrditi da je to ime slobodno. Kod aplikacije ih kuje za redove koje se sprema unijeti, tako da objekat ima identitet prije nego što je ikada stigao do baze podataka, a klijent se može na njega referirati dok je upis još uvijek u toku. Distribuirani sistemi se oslanjaju na njih još jače: nekoliko servisa koji pišu u jednu tabelu, mobilni klijent koji radi van mreže u avionu i stvara zapise, red koji mora prepoznati poruku koju je već obradio — niko od njih ne može čekati svoj red za zajednički brojač. Verzija 5 pokriva drugačiju potrebu — to je stabilan identifikator izveden iz nečega što već imate: isti dokument, isti URL ili isti račun se uvijek preslikavaju na isti UUID, tako da se uvoz može pokrenuti dva puta bez dupliranja bilo čega. Na drugim mjestima su jednostavno format koji sistem zahtijeva — korelacijski identifikator provučen kroz zapise i praćenja (traces), ime datoteke koje se neće sudarati kada otpremanja od hiljadu korisnika slete u jedan bucket, Windows ključ registra, ili testni podaci koji moraju izgledati kao stvarni.
Vrijedi znati nekoliko poštenih ograničenja. Jedna serija je jedna verzija: vrijednost u polju Verzija se primjenjuje na sve u njoj, tako da je niz v4 identifikatora jedna serija, a v7 druga. Ovo je generator, a ne inspektor — lijepljenje UUID-a da bi se pročitala njegova verzija ili vremenska oznaka nije nešto što ova stranica radi. Sačuvaj u datoteku zapisuje običnu tekstualnu datoteku umjesto CSV ili JSON formata. Verzija 7 otvoreno otkriva kada je stvorena, u milisekundu tačno, što je stvarni kompromis a ne greška, a verzija 1 otkriva vrijeme na isti način; ako je to problem za vaše podatke, verzija 4 je verzija koja nikome ništa ne govori. Dvije posebne vrijednosti iz standarda nisu verzije i stoga nisu opcije pod Verzija, ali ih možete kopirati odavde: nil UUID, 00000000-0000-0000-0000-000000000000, i max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Sve na ovoj stranici prati RFC 9562, specifikaciju koja je zamijenila RFC 4122 u 2024. godini, tako da je izlaz prihvaćen od strane svake biblioteke, baze podataka ili API-ja koji uopšte rukuju UUID-ovima. Unutar ovih ograničenja garancija je snažna: svaki identifikator je napravljen prema standardu, iz kriptografski sigurne slučajnosti, na vašoj vlastitoj mašini, i niko ga drugi nikada ne vidi.