Što je UUID v7 i kako ga ovaj alat generira?
UUID v7 je 36‑znakovni identifikatorski format koji na početak ugrađuje 48‑bitni Unix milisekundni vremenski žig, a ostatak popunjava kriptografski jakim nasumičnim bitovima. Ukupna duljina iznosi 128 bita, a prikaz je standardiziran kao niz od 36 znakova (uključujući crtice). Alat na ovoj stranici omogućuje generiranje između 1 i 100 takvih identifikatora odjednom, s mogućnošću prikaza u velikim ili malim slovima te s uključenim ili isključenim crticama.
Svi se identifikatori generiraju isključivo u pregledniku koristeći jaku ugrađenu slučajnost preglednika – ni jedan se podatak ne šalje na poslužitelj BroBroGo. Promjena bilo koje postavke (broj ID‑ova, velika slova, crtice) odmah pokreće ponovno generiranje cijelog popisa. Korisnik može kopirati pojedinačni identifikator klikom na njega ili sve odjednom pritiskom na gumb za kopiranje, nakon čega alat ispisuje "Copied all!".
Struktura UUID v7 nije proizvoljna: prvih 48 bita predstavlja broj milisekundi proteklih od 1. siječnja 1970. (Unix epohe). Nakon toga slijedi 74 bita nasumičnog sadržaja, a preostalih 6 bita služi za verziju i varijantu (verzija 7, varijanta RFC 9562). Zbog vremenskog žiga na početku, identifikatori su sortirani po trenutku nastanka, što ih razlikuje od potpuno nasumičnog UUID v4.
Zašto je UUID v7 bolji od UUID v4 za baze podataka?
UUID v4 je potpuno nasumičan – prvih nekoliko znakova nema nikakve veze s vremenom stvaranja. Kada se takvi identifikatori koriste kao primarni ključevi u relacijskim bazama podataka koje interno koriste B‑stabla (npr. PostgreSQL, MySQL, SQL Server), nasumičnost uzrokuje ozbiljnu fragmentaciju indeksa. Svaki novi unos može završiti na bilo kojoj fizičkoj lokaciji unutar indeksa, što prisiljava bazu na često preuređivanje i pisanje izvan redoslijeda. Rezultat je pad performansi pri unosu podataka i veće zauzeće diska.
UUID v7 umanjuje taj problem jer prvih 48 bita (odnosno prvih 12 heksadecimalnih znamenki u standardnom prikazu s crticama) uvijek raste s vremenom. Unosi stvoreni u različitim milisekundama automatski se umeću blizu kraja indeksa, što poboljšava lokalnost podataka i smanjuje potrebu za preuređivanjem. Baze podataka koje podržavaju klasterirane indekse (npr. InnoDB u MySQL‑u) posebno profitiraju jer redoslijed fizičkog zapisa na disku prati vremenski redoslijed unosa.
No važno je napomenuti: UUID v7 ne jamči strogi redoslijed za identifikatore generirane unutar iste milisekunde. Ako se 100 identifikatora generira u istom trenutku (štoperica nije dovoljno precizna ili se generiranje odvija u istom ciklusu), njihov međusobni poredak ovisi isključivo o nasumičnom dijelu. To je namjerna odluka – žrtvuje se fini red unutar milisekunde radi mogućnosti paralelnog generiranja na više čvorova bez međusobne komunikacije.
Alat na ovoj stranici generira sve identifikatore u jednom pregledniku, pa će vremenski žigovi obično biti isti za sve ID‑ove generirane u jednom kliku. Stoga će se oni međusobno razlikovati samo po nasumičnom dijelu, a njihov poredak na popisu nije nužno kronološki – jednostavno je poredak generiranja u skripti.
Kako alat jamči privatnost i sigurnost?
Sva se generacija odvija lokalno u pregledniku. Alat ne šalje niti prima podatke s poslužitelja – nema API poziva, nema pohrane na udaljenom serveru, nema kolačića koji bi pratili uneseni broj ili dobivene identifikatore. To je posebno važno za programere koji rade s osjetljivim podacima ili u okruženjima gdje se privatnost podataka strogo kontrolira, poput zdravstvenih ili financijskih sustava.
Nasumični dio UUID v7 generira se pomoću crypto.getRandomValues() (ili odgovarajućeg sučelja), što je kriptografski jak izvor slučajnosti koji nude moderni preglednici. To znači da je nemoguće predvidjeti buduće identifikatore čak i ako napadač poznaje vremenski žig. Kombinacija vremenskog žiga i kriptografske slučajnosti čini UUID v7 prikladnim za scenarije gdje su potrebni nepredvidivi, ali vremenski poredani identifikatori – primjerice u sustavima za upravljanje događajima (event sourcing) ili zapisima nadzora (audit trail).
Prilagodba izlaza: velika slova i crtice
Standardni prikaz UUID‑a podrazumijeva 32 heksadecimalne znamenke grupirane u pet blokova odvojenih crticama: 8‑4‑4‑4‑12. Alat omogućuje isključivanje crtica, čime se dobiva niz od 32 znaka bez separatora. To može biti korisno kada se identifikatori pohranjuju u polja fiksne duljine ili kada se prosljeđuju kroz sustave koji ne podnose crtice (npr. neki URL‑ovi ili nazivi datoteka). Ipak, treba imati na umu da format bez crtica više nije standardan UUID po specifikaciji RFC 9562 – gubi se ljudska čitljivost i mogućnost brzog prepoznavanja strukture.
Preklopka za velika slova mijenja prikaz heksadecimalnih znamenki iz malih (a‑f) u velika (A‑F). Oba su oblika semantički identična, ali neki sustavi (npr. Microsoft Windows) tradicionalno koriste velika slova, dok drugi preferiraju mala. Bitno je napomenuti da su velika i mala slova u heksadecimalnom zapisu ekvivalentna prilikom parsiranja – baze podataka i programski jezici obično ih tretiraju jednako, pa je izbor pitanje konvencije i čitljivosti.
Kada koristiti UUID v7 umjesto ULID‑a ili NanoID‑a?
Usporedba s drugim vremenski poredanim formatima pomaže u odabiru pravog alata. ULID (Universally Unique Lexicographically Sortable Identifier) također koristi vremenski žig na početku (48 bita, isti kao UUID v7), ali ostatak (80 bita) ispunjava nasumičnim podacima te koristi Crockfordov Base32 zapis, što rezultira 26‑znakovnim nizom. ULID je taktilno poredan leksikografski, ali ne slijedi UUID standard – neki sustavi zahtijevaju format od 36 znakova s crticama (npr. mnogi ORM‑ovi).
NanoID je znatno kraći (obično 21 znak), potpuno nasumičan i ne sadrži vremenski žig. Brži je za generiranje i pogodan za kratke identifikatore u aplikacijama gdje vrijeme stvaranja nije važno, ali ne nudi vremensko sortiranje i nije standardiziran.
UUID v7 nasljeđuje prednosti standardnog UUID formata (široka podrška u programskim jezicima, bibliotekama i bazama) dok dodaje vremensku poredanost. Nedostatak je što je dulji od ULID‑a (36 naspram 26 znakova) i ne nudi jamstvo strogog reda unutar iste milisekunde. Međutim, za većinu distribucijskih sustava gdje je potrebno kombinirati jedinstvenost, nepredvidivost i indeksnu lokalnost, UUID v7 je optimalan izbor.
Alat na ovoj stranici podržava isključivo UUID v7 među vremenski poredanim formatima – ne nudi ULID ili NanoID. To je svjesna odluka kako bi se pojednostavilo sučelje i usredotočilo na format koji je standardiziran i najčešće tražen u praksi.
Česta pitanja (FAQ)
1. Mogu li generirati više od 100 UUID v7 identifikatora odjednom? Ne, alat je ograničen na maksimalno 100 identifikatora po generiranju. Ako trebate više, jednostavno ponovite generiranje. Ograničenje je postavljeno radi preglednosti i performansi u pregledniku.
2. Hoće li se identifikatori ponoviti ako generiram više puta u istom danu? Ne. Vjerojatnost kolizije iznimno je mala zbog 74 bita nasumičnog sadržaja – čak i kada bi se generiralo milijardu identifikatora u istoj milisekundi, vjerojatnost duplikata ostaje zanemariva (reda veličine 10⁻¹⁵). Dva generiranja u različitim milisekundama sigurno će imati različite vremenske žigove.
3. Zašto svi identifikatori u jednom generiranju imaju isti početak? Zato što alat generira sve ID‑ove u istom trenutku (unutar jedne milisekunde ili vrlo blizu), pa je vremenski žig isti za sve. Početak identifikatora (prvih 12 heksadecimalnih znamenki) stoga je identičan. Razlike nastaju u nasumičnom dijelu.
4. Je li UUID v7 siguran za korištenje u web aplikacijama koje izlažu identifikatore u URL‑u? Da. Budući da je nasumični dio kriptografski jak, identifikatori se ne mogu predvidjeti, što sprječava napade poput enumeracije resursa (IDOR). Ipak, ne preporučuje se korištenje vremenskog žiga kao jedinog elementa za autorizaciju – uvijek provjeravajte dozvole na poslužitelju.
5. Što se dogodi ako odaberem prikaz bez crtica, a zatim kopiram sve identifikatore odjednom? Dobit ćete 36‑znakovne nizove bez crtica (32 heksadecimalne znamenke) odvojene prijelomom retka. To je potpuno valjan format za pohranu, ali ga neki sustavi možda neće prepoznati kao UUID ako provjeravaju crtice.
6. Može li se alat koristiti bez internetske veze nakon prvog učitavanja stranice? Da. Cijela se logika izvršava u pregledniku pomoću JavaScripta koji je u potpunosti preuzet pri prvom posjetu. Jednom kad se stranica učita, generiranje radi i offline – nema povratnih poziva poslužitelju.