Generator UUID-a

Generirajte UUID-ove u pregledniku: potpuno nasumične v4, vremenski sortirane v7 ili determinističke v5. Do 1000 odjednom, i ništa ne napušta vaš uređaj.

Pritisnite Generiraj za izvlačenje
Verzija
Napredne opcije

Trebate li identifikator koji se neće sukobiti s nekim drugim koji je netko drugi napravio, na stroju za koji nikada niste čuli, a da nikoga ne pitate za dopuštenje? To je upravo posao koji obavlja UUID. To je 128-bitni broj, napisan kao 36 znakova u dobro poznatom uzorku 8-4-4-4-12, i cijeli njegov dizajn služi tome da dva od njih nikada neće biti ista, iako ništa ne koordinira tko dobiva koji. Ovaj besplatni generator stvara ih u vašem pregledniku: odaberite verziju pod „Verzija”, navedite koliko ih trebate pod „Broj” i pritisnite „Generiraj”. Stranica se otvara s jednim v4, što je verzija koju većina projekata traži, tako da ste od prvog identifikatora udaljeni samo jedan klik.

Svaki identifikator gradi vaš preglednik putem Web Crypto API-ja. Verzija 4 koristi crypto.randomUUID() tamo gdje ga preglednik pruža, a inače crypto.getRandomValues() — kriptografski snažan izvor nasumičnosti umjesto pseudo-nasumične JavaScript funkcije kao što je Math.random(). Verzija 7 na početak stavlja 48-bitnu milisekundnu vremensku oznaku, zatim 12-bitni brojač koji se povećava unutar iste milisekunde, a zatim 62 nasumična bita, što je metoda sortiranja opisana u RFC 9562; taj brojač je razlog zašto serija od tisuću izlazi po redu, a ne izmiješana. Verzija 1 kombinira vremensku oznaku s nasumičnim identifikatorom čvora koji ima postavljen multicast bit, tako da nikada ne nosi adresu vaše mrežne kartice na način na koji su to činile originalne implementacije iz 1990-ih. Verzije 3 i 5 uopće nisu nasumične: one sažimlju imenski prostor zajedno s nazivom koristeći MD5 i SHA-1 respektivno, a to se sažimanje također odvija na vašem uređaju. Ništa se ne šalje na poslužitelj, ništa se ne bilježi, a nakon što se stranica učita, nastavlja raditi i kada ste izvan mreže.

„Verzija” je polje koje odlučuje o svemu ostalom. Verzija 4 je 122 nasumična bita bez ikakve strukture — to je zadana opcija i pravi odgovor kada identifikator mora biti samo jedinstven. Verzija 7 zadržava 62 nasumična bita, ali počinje s vremenom kada je stvorena, tako da se skup njih sortira redoslijedom kojim su napravljeni; zbog toga je to verzija koju treba odabrati kada identifikator postaje ključ baze podataka. Verzija 1 izvorna je vremenski zasnovana shema, zadržana ovdje za sustave koji je i dalje traže. Verzije 3 i 5 neobičan su par: one su determinističke, što znači da isti ulazni podaci uvijek proizvode isti identifikator, i one uzimaju dva dodatna polja — „Imenski prostor”, koji je jedan od standardnih prostora DNS, URL, OID i X.500 ili vaš vlastiti „Prilagođeni imenski prostor (UUID)”, te „Naziv”, tj. niz znakova koji se identificira. Dajte v5 URL imenski prostor i https://example.com/a, i dobit ćete isti UUID danas, sutra i na tuđem stroju. Zbog toga „Broj” nestaje kada je odabran v3 ili v5: tisuću kopija jedne determinističke vrijednosti bilo bi samo tisuću kopija jedne determinističke vrijednosti. Za svaku drugu verziju „Broj” ide od 1 do 1000.

Četiri prekidača mijenjaju oblik rezultata bez mijenjanja 128 bitova ispod njega. „Velika slova” ispisuje heksadecimalne znamenke kao verzale, „Bez crtica” daje kompaktan oblik od 32 znaka koji preferiraju neke kolone i nazivi datoteka, a „Vitičaste zagrade” omotava vrijednost u { } — oblik koji Windows i .NET svijet nazivaju GUID. Pod „Napredne opcije”, urn:uuid: dodaje prefiks koji ga čini formalnim URN-om; dok je uključen, isključuje „Vitičaste zagrade” i „Bez crtica”, jer standard dopušta točno jedan oblik URN-a i to je onaj kanonski s crticama. „Format kopiranja” odlučuje kako se serija spaja kada je preuzimate: jedan po retku, odvojeni zarezima ili svaka vrijednost pod navodnicima sa zarezom na kraju, što se lijepi izravno u niz unutar koda. Ispod rezultata nalazi se redak koji izvještava o nasumičnosti 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, a ne skriveno. „Kopiraj sve” i „Spremi u datoteku” oboje poštuju „Format kopiranja”. „Povijest” čuva vaših zadnjih 10 serija u vašem pregledniku: kliknite jednu da biste je vratili, kopirajte ili izbrišite jedan unos ili očistite sve. „Očisti” prazni rezultat dok zadržava vaše postavke, a nakon 50 identifikatora popis postaje jedan pomični blok umjesto pedeset redaka.

Najposljedičnija stvar na ovoj stranici jest razlika između v4 i v7 kao primarnog ključa, a to nije stvar ukusa. Indeksi baze podataka su stabla koja se drže u sortiranom redoslijedu, a to gdje novi ključ slijeće u tom redoslijedu odlučuje o tome koliko posla iziskuje umetanje. v4 ključ je nasumičan, pa uzastopna umetanja slijeću u nepovezane kutove indeksa: stranice koje su bile pune dijele se, dijelovi stabla koje baza podataka drži u memoriji rijetko su oni dijelovi koji su potrebni za sljedeće umetanje, a indeks na kraju bude veći i fragmentiraniji nego što to zahtijevaju reci na koje ukazuje. v7 ključ počinje s trenutačnom milisekundom, pa uzastopna umetanja slijeću jedna pored drugih na desnom rubu stabla, što je uzorak koji proizvodi cijeli broj koji se automatski povećava i uzorak oko kojeg su izgrađene indeksne strukture. To je cjelokupan kompromis: v7 vam kupuje ponašanje pri umetanju kao kod sekvencijalnog ključa, dok zadržava svojstvo zbog kojeg ste uopće odabrali UUID-ove, a to je da svatko može iskovati jedan bez pitanja poslužitelja. Ono što to košta jest da je vrijeme stvaranja sada čitljivo unutar identifikatora, a hoće li to biti važno pitanje je o vašim podacima, a ne o formatu.

Nitko nikada ne provjerava jedinstvenost UUID-a; njegova veličina je garancija. Ne postoji registar, nema povratnog putovanja do poslužitelja, nema pretraživanja — generator proizvede broj i preda ga, a razlog zbog kojeg se dva ne sudaraju jednostavno je taj što postoji 2^122 mogućih vrijednosti v4, otprilike 5,3 sekstilijuna. Paradoks rođendana je pošten način za mjerenje toga: trebali biste imati otprilike 2,7 trilijuna identifikatora prije nego što postoji izjednačena šansa da se bilo koja dva podudare, što je milijardu novih UUID-ova svake sekunde tijekom 86 godina. Vrijedi biti precizan oko toga što to obećava, a što ne obećava. To je statistička garancija, a ne aritmetička, i drži samo dok je nasumičnost ispod nje stvarna — loše inicijaliziran generator, ili virtualni stroj koji je kloniran zajedno sa svojom zalihom entropije, razbija ga na način koji format ne može otkriti. Verzija 7 dodatno sužava pitanje: unutar jedne milisekunde jedan generator ne može ponoviti samog sebe, jer se brojač povećava umjesto da baca kockice, a kroz nezavisne generatore 62 nasumična bita obavljaju taj posao.

UUID je identifikator, a ne lozinka. Verzija 4 je nepredvidiva, a to ljude dovodi u iskušenje da ga tretiraju kao tajnu — vezu za ponovno postavljanje lozinke, URL koji se ne može pogoditi, sesijski token, API ključ. Nepredvidivost je stvarna, ali tajnost je svojstvo načina na koji se postupa s vrijednošću, a identifikatori se prema dizajnu neoprezno tretiraju: sjede u URL-ovima, koji završavaju u povijesti preglednika, zapisnicima poslužitelja, HTTP zaglavljima referer te analitici, te se zalijepe u chat poruke. Ostale verzije su još lošiji kandidati. Verzija 1 i verzija 7 obje kodiraju trenutak stvaranja, pa svatko tko drži jednu zna otprilike kada je napravljena i može suziti susjedstvo svega ostalog napravljenog uz nju. Verzije 3 i 5 su namjerno determinističke: v5 UUID adrese e-pošte nije sažeta tajna, to je vrijednost koju svatko s istom adresom može izračunati u jednoj sekundi. Koristite UUID za imenovanje stvari. Koristite generator lozinki, ili token iz biblioteke izgrađene za tajne, kada vrijednost mora ostati nepoznata.

Zašto odabrati ovaj generator UUID-a?

UUID-ovi se pojavljuju tamo gdje nešto treba biti imenovano prije nego što išta može potvrditi da je naziv slobodan. Aplikacijski kod kuje ih za retke koje se sprema umetnuti, tako da objekt ima identitet prije nego što je uopće stigao do baze podataka i tako da se klijent može referencirati na njega dok je pisanje još u letu. Distribuirani sustavi se još više oslanjaju na njih: nekoliko usluga koje zapisuju u jednu tablicu, izvanmrežni mobilni klijent koji stvara zapise u avionu, red čekanja koji mora prepoznati poruku koju je već obradio — ništa od toga ne može čekati svoj red za zajednički brojač. Verzija 5 pokriva drugu potrebu, a to je stabilan identifikator izveden iz nečega što već imate: isti dokument, isti URL ili isti račun uvijek preslikava na isti UUID, tako da se uvoz može pokrenuti dvaput bez udvostručavanja ičega. Drugdje, oni su jednostavno format koji sustav zahtijeva — korelacijski identifikator provučen kroz zapise i praćenja, naziv datoteke koji se neće sukobiti kada se prijenosi tisuća korisnika nađu u istom spremniku, ključ Windows registra, probni podaci koji moraju izgledati kao stvarni podaci.

Nekoliko iskrenih ograničenja vrijedi znati. Jedna serija je jedna verzija: vrijednost u „Verzija” primjenjuje se na sve u njoj, tako da su serija v4 i serija v7 dvije serije. Ovo je generator, a ne inspektor — lijepljenje UUID-a za čitanje njegove verzije ili vremenske oznake nije nešto što ova stranica radi. „Spremi u datoteku” ispisuje običnu tekstualnu datoteku, a ne CSV ili JSON. Verzija 7 otvoreno otkriva kada je stvorena, u milisekundu točno, što je stvarni kompromis prije nego nedostatak, a verzija 1 propušta vrijeme na isti način; ako je to problem za vaše podatke, verzija 4 je verzija koja nikome ne govori ništa. 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 slijedi RFC 9562, specifikaciju koja je 2024. zamijenila RFC 4122, tako da bilo koja biblioteka, baza podataka ili API koji uopće obrađuje UUID-ove prihvaća izlaz. Unutar tih ograničenja jamstvo je snažno: svaki identifikator izgrađen je prema standardu, iz kriptografski sigurne nasumičnosti, na vašem vlastitom stroju, i nitko ga drugi nikada ne vidi.

FAQ

Kako generirati UUID?

Odaberite verziju pod „Verzija”, postavite koliko ih trebate pod „Broj” i pritisnite „Generiraj”. Stranica se otvara s jednim identifikatorom verzije 4, što je ono što većina projekata želi, pa vas od običnog UUID-a dijeli jedan klik. Svaka se vrijednost pojavljuje s vlastitim gumbom za kopiranje, a „Kopiraj sve” uzima cijelu seriju odjednom.

Koja je razlika između UUID-a v4 i v7?

Verzija 4 iznosi 122 nasumična bita bez ikakve strukture, tako da nemaju nikakav međusobni odnos. Verzija 7 troši prvih 48 bitova na milisekundu u kojoj je stvorena, dodaje brojač i 62 nasumična bita, te se stoga može sortirati: serija izlazi redoslijedom kojim je nastala. Koristite v4 kada identifikator mora biti samo jedinstven, a v7 kada će također biti ključ baze podataka.

Koju verziju UUID-a trebam koristiti?

Verzija 4, osim ako imate razloga odabrati drugu. Odaberite verziju 7 ako identifikator postaje primarni ključ i ako je važna izvedba umetanja, verziju 5 ako trebate da isti unos uvijek proizvede isti identifikator, a verziju 1 samo ako to izričito zatraži sustav s kojim morate komunicirati. Verzija 3 je verzija 5 s MD5 umjesto SHA-1 i postoji zbog kompatibilnosti.

Jesu li generirani UUID-ovi zaista nasumični i sigurni?

Nasumičnost je kriptografski sigurna: dolazi od Web Crypto API-ja vašeg preglednika putem crypto.randomUUID() ili crypto.getRandomValues(), a ne od Math.random(). Sigurno u smislu nemogućnosti pogađanja različito je pitanje od sigurno u smislu tajnosti — UUID je identifikator i ne bi se trebao koristiti kao lozinka, sesijski token ili API ključ.

Mogu li generirati puno UUID-ova odjednom?

Da, do 1000 odjednom. Postavite „Broj” i pritisnite „Generiraj”; nakon pedeset vrijednosti rezultat postaje jedan pomični blok, a ne dugačak popis redaka. „Kopiraj sve” i „Spremi u datoteku” uzimaju cijelu seriju spojenu onako kako to kaže „Format kopiranja” — jedna vrijednost po retku, razdvojeno zarezima ili pod navodnicima za lijepljenje u niz znakova.

Zašto mi v3 i v5 daju isti UUID svaki put?

Zato što za to i služe. Verzije 3 i 5 su determinističke: one sažimlju imenski prostor i naziv koji im date, tako da identični ulazni podaci uvijek proizvode identičan identifikator, na bilo kojem stroju i u bilo kojem jeziku. Zbog toga su korisne za izvođenje stabilnog identifikatora iz nečega što već imate, a to je i razlog zašto je „Broj” skriven kada ih odaberete.

Što su Imenski prostor i Naziv i koji imenski prostor da odaberem?

Oni su dva ulazna podatka iz kojih se izračunava UUID verzije 3 ili verzije 5. „Imenski prostor” označava o kojoj vrsti stvari se radi — DNS za nazive hostova, URL za adrese, OID i X.500 za takve sheme direktorija ili pak „Prilagođeni imenski prostor (UUID)” ako želite navesti vlastiti UUID imenskog prostora, što je i uobičajen izbor unutar aplikacije. „Naziv” je sam niz znakova. Različiti imenski prostori daju potpuno različite rezultate za isti naziv, što i jest razlog zbog kojeg postoje.

Zašto je UUID v7 bolji od v4 za primarni ključ baze podataka?

Zbog toga gdje te vrijednosti završavaju u indeksu. Indeks se čuva sortiranim redoslijedom, a nasumični ključ v4 pada bilo gdje u njemu, pa umetanja razdvajaju stranice svugdje po stablu, dok su dijelovi koji se drže u memoriji rijetko oni koji su potrebni idući put. Ključ v7 počinje s trenutačnom milisekundom, pa uzastopna umetanja padaju zajedno na sam kraj indeksa, a to je način na koji se ponaša sekvencijalni cjelobrojni ključ — dok istovremeno omogućuje bilo kojoj usluzi stvaranje identifikatora bez traženja središnjeg brojača.

Bi li dva UUID-a ikada mogla biti ista?

U načelu da, u praksi ne, a isplati se znati zašto. Nitko ne provjerava jedinstvenost: jednostavno postoji 2^122 mogućih vrijednosti verzije 4, odnosno oko 5,3 sekstilijuna, i trebali biste otprilike 2,7 trilijuna — milijardu svake sekunde 86 godina zaredom — prije nego što bi šanse za samo jedan sudar bile izjednačene s tim da se on ne dogodi. To je jamstvo više statističko nego apsolutno, i ovisi o tome je li nasumičnost stvarna, a to je i razlog zbog kojeg ovaj generator koristi Web Crypto API radije od obične pseudo-nasumične funkcije.

Mogu li koristiti UUID kao lozinku, API ključ ili sesijski token?

Ne, i to je pogreška koja košta najviše. UUID verzije 4 ne može se predvidjeti, ali s identifikatorima se rukuje kao da su javni: oni završavaju u URL-ovima, povijesti preglednika, zapisnicima poslužitelja, HTTP zaglavljima referer te analitici. Verzije 1 i 7 dodatno otkrivaju kada su stvorene, a verzije 3 i 5 može ponovno izračunati svatko tko poznaje unesene podatke. Za sve što mora ostati tajna, koristite generator lozinki ili token iz biblioteke namijenjene za tajne.

Otkriva li UUID v7 kada je nastao?

Da, precizno u milisekundu, i to prema dizajnu, a ne propustom — vremenska oznaka je ono što v7 čini podložnim za sortiranje. Redak ispod rezultata prikazuje vrijeme kodirano u prvoj vrijednosti serije, kako biste mogli vidjeti točno što je to što se otkriva. Verzija 1 isto u sebi nosi vremensku oznaku. Ako je vrijeme stvaranja informacija koju radije ne biste objavili, verzija 4 ne govori nikome ništa.

Otkriva li UUID v1 moju MAC adresu?

Ne na ovome mjestu. Izvorna shema koristila je adresu mrežne kartice stroja kao polje čvora, odakle i potječe ugled v1, ali standard također dopušta nasumični identifikator čvora označen s multicast bitom, a to je ono što ovaj generator proizvodi. Vaša hardverska adresa nikada se ne čita i nikada se ne pojavljuje u izlazu.

Što mijenjaju Velika slova, Bez crtica, Vitičaste zagrade i urn:uuid:?

Samo način prikazivanja — 128 bitova koji se nalaze ispod identični su u svakom pogledu. „Velika slova” ispisuje heksadecimalne znamenke kao verzale, „Bez crtica” daje kompaktnu verziju od 32 znaka, „Vitičaste zagrade” obavija vrijednost u { } kao što Windows i .NET pišu GUID, a urn:uuid: dodaje onaj prefiks koji ga ujedno i čini formalnim URN-om. urn:uuid: isključuje ostala dva kada se uključi, zato što standard definira točno jedan URN oblik, a to je onaj kanonski s crticama.