Generator UUID-a online | Besplatno generisanje svih verzija (v1-v7)
Šta je UUID?
UUID (Universally Unique Identifier) je 128-bitni identifikator koji se koristi u računarskim sistemima za jedinstvenu identifikaciju informacija. UUID je standardizovan prema RFC 4122 i zahvaljujući svojoj ogromnoj entropiji garantuje praktično nultu vjerovatnoću kolizije – to znači da će dva nezavisno generisana UUID-a biti gotovo sigurno jedinstvena.
UUID ima standardni format: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, gdje je svako x heksadecimalna cifra (0-9, a-f), M označava verziju UUID-a, a N označava varijantu.
Verzije UUID-a
UUID v1 (Vremenska oznaka + MAC adresa)
UUID v1 se bazira na trenutnoj vremenskoj oznaci (timestamp) i nasumičnoj vrijednosti (u pretraživaču umjesto MAC adrese). Koristi 100-nanosekundne intervale od 15. oktobra 1582. (Gregorijanski kalendar).
Upotreba:
- Situacije kada je potrebno hronološko sortiranje UUID-a
- Debagovanje i evidentiranje (UUID sadrži informaciju o vremenu kreiranja)
- Distribuirani sistemi sa vremenskom sinhronizacijom
Primjer: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Prednosti:
- UUID se mogu hronološki sortirati prema vremenu kreiranja
- Korisno za reviziju i debagovanje
- Sadrži informaciju o vremenskoj oznaci
Mane:
- Potencijalni sigurnosni rizik – sadrži vremensku oznaku
- U pretraživaču ne sadrži stvarnu MAC adresu (zamijenjeno nasumičnom vrijednošću)
- Loša lokacija u bazi podataka (vremenska oznaka je u niskobitnim dijelovima)
UUID v3 (MD5 heš)
UUID v3 se generiše pomoću MD5 heša namespace UUID-a i naziva. Determinističko – isti namespace + naziv uvijek kreiraju isti UUID.
Upotreba:
- Konverzija URL-ova, DNS naziva ili drugih identifikatora u UUID
- Situacije kada je potreban ponovljiv UUID
- Mapiranje između različitih sistema identifikacije
Primjer: a3bb189e-8bf9-3888-9912-ace4e6543002
Prednosti:
- Determinističko (isti ulaz = isti izlaz)
- Idealno za konverzije poznatih identifikatora
- Nema kolizije za različite ulaze
Mane:
- MD5 je zastarjeli algoritam (preferirajte v5)
- Zahtijeva namespace i naziv
- Nije moguće povratiti originalni ulaz
UUID v4 (Nasumično) - PREPORUČENO
Najčešće korištena verzija UUID-a. UUID v4 se generiše čisto nasumično pomoću kriptografski sigurnog generatora nasumičnih brojeva (crypto.getRandomValues()).
Upotreba:
- Primarni ključevi u bazama podataka
- Identifikatori sesija (session ID-evi)
- Jedinstveni nazivi datoteka
- API tokeni
- Opšte svrhe gdje je potreban garantovano jedinstven ID
Primjer: f47ac10b-58cc-4372-a567-0e02b2c3d479
Prednosti:
- Maksimalna entropija i sigurnost
- Nema zavisnosti od vremena ili sistemskih parametara
- Najjednostavnija implementacija
Vjerovatnoća kolizije: Pri generisanju 1 milijarde UUID-a u sekundi tokom 100 godina, šansa za koliziju je približno 0,00000006%.
UUID v5 (SHA-1 heš)
UUID v5 je isti kao v3, ali koristi SHA-1 umjesto MD5. Modernija i sigurnija alternativa v3.
Upotreba:
- Isto kao v3, ali sa boljom sigurnošću
- Preferira se u odnosu na v3 za nove projekte
- Generisanje UUID-a iz URL-ova, DNS naziva, OID-ova, X.500 DN
Primjer: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Prednosti:
- Determinističko
- SHA-1 je robusniji od MD5
- Pogodno za mapiranje između sistema
Mane:
- SHA-1 se takođe smatra zastarjelim (ali i dalje sigurnijim od MD5)
- Zahtijeva namespace i naziv
UUID v6 (Poređana vremenska oznaka)
UUID v6 je poboljšana verzija v1 sa preuređenim vremenskim bitovima za bolje indeksiranje baze podataka. Dizajnirano da riješi probleme sa lokalitetom u bazama podataka.
Upotreba:
- Primarni ključevi baze podataka sa vremenskim sortiranje
- Sistemi koji zahtijevaju hronološko sortiranje i performanse baze podataka
- Modernija alternativa v1
Primjer: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Prednosti:
- Bolja lokacija u bazi podataka nego v1 (vremenska oznaka u visokobitnim dijelovima)
- Hronološko sortiranje
- Kompatibilno sa UUID standardom
Mane:
- Manje se koristi od v1/v4
- I dalje sadrži vremenske informacije (sigurnosni rizik)
UUID v7 (Unix vremenska oznaka)
UUID v7 koristi Unix vremensku oznaku (milisekunde od 1970) + nasumične bitove. Najnovija verzija UUID-a sa najboljom lokacijom u bazi podataka.
Upotreba:
- Moderni primarni ključevi baze podataka
- Sistemi koji zahtijevaju performanse + vremensko sortiranje
- Zamjena za v1/v6 u novim projektima
Primjer: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Prednosti:
- Najbolja lokacija u bazi podataka od svih verzija
- Unix vremenska oznaka je standardna
- Kombinuje prednosti nasumičnosti i vremenskog sortiranja
Mane:
- Relativno nova specifikacija (RFC 4122bis)
- Manje podržana u naslijeđenim sistemima
Koju verziju UUID-a koristiti?
Vodič za odluke
Trebate li maksimalnu sigurnost i nasumičnost? → Koristite UUID v4 (najčešći izbor)
Trebate li vremensko sortiranje i performanse baze podataka? → Koristite UUID v7 (moderno) ili UUID v6 (standard)
Trebate li ponovljiv UUID iz postojećih identifikatora? → Koristite UUID v5 (SHA-1) ili UUID v3 (MD5, naslijeđeno)
Trebate li vremensku oznaku i trag revizije? → Koristite UUID v1 (naslijeđeno, lošije performanse baze podataka)
Baza podataka
Za nove projekte: UUID v7 ili v4
- v7 je idealan za vremensko sortiranje + performanse
- v4 za maksimalnu nasumičnost bez vremenskih informacija
Za naslijeđene sisteme: UUID v1 ili v6
- v6 ima bolju lokaciju u bazi podataka nego v1
- v1 je široko podržan
Prednosti UUID-a kao primarnog ključa:
- Globalna jedinstvenost – Možete povezivati podatke iz različitih baza podataka bez konflikta
- Sigurnost – Za razliku od sekvencijalnih ID-ova (1, 2, 3…) ne možete predvidjeti sljedeće vrijednosti
- Distribuirani sistemi – UUID se mogu generisati nezavisno na više servera bez koordinacije
- Spajanje baza podataka – Prilikom spajanja dvije baze podataka ne dolazi do konflikta
Mane:
- Veća veličina (16 bajtova naspram 4-8 bajtova za integer)
- Sporije indeksiranje u nekim bazama podataka (koristite v6/v7 za bolje performanse)
- Manje čitljivo za čovjeka
API i web servisi
- REST API – Jedinstveni identifikatori za resurse
- GraphQL – Globalni identifikatori za čvorove
- Webhookovi – Praćenje zahtjeva i odgovora
- Tokeni – ID-evi sesija, tokeni za osvježavanje
Datoteke i pohrana
- Nazivi datoteka – Prevencija kolizija prilikom postavljanja
- S3/Cloud pohrana – Jedinstvene putanje do objekata
- Ključevi keša – Identifikatori u sistemima keširanja
Frontend aplikacije
- React/Vue komponente – Jedinstveni ključevi za liste
- Privremeni ID-evi – ID-evi prije spremanja u bazu podataka
- Lokalna pohrana – Ključevi za pohranjene podatke
- Offline-first aplikacije – Generisanje ID-eva bez povezivanja na server
Napredne funkcije generatora
Generisanje UUID-a sa prilagođenim vremenom
Za verzije zasnovane na vremenu (v1, v6, v7) možete odabrati bilo koju vremensku oznaku pomoću alata za odabir datuma i vremena. Ovo je korisno za:
Testiranje:
- Simulacija UUID-a kreiranih u prošlosti
- Testiranje vremenskog sortiranja u bazama podataka
- Reprodukcija UUID-a za debagovanje
Migracija podataka:
- Generisanje UUID-a sa historijskim vremenskim oznakama
- Popunjavanje podataka sa korektnim vrijednostima vremenskih oznaka
- Uvoz podataka iz različitih vremenskih perioda
Revizija i usklađenost:
- Rekonstrukcija UUID-a prema vremenu nastanka zapisa
- Retroaktivno generisanje identifikatora
Primjer upotrebe:
- Odaberite verziju v1, v6 ili v7
- Postavite datum i vrijeme pomoću alata za odabir datuma i vremena
- Generišite UUID sa vašom prilagođenom vremenskom oznakom
Heš-bazirani UUID (v3, v5)
Za determinističke UUID-ove možete koristiti verzije v3 (MD5) ili v5 (SHA-1):
Kako koristiti:
- Odaberite namespace prema tipu vašeg identifikatora
- Unesite naziv/vrijednost
- Generišite UUID
Primjeri:
| Namespace | Naziv (ulaz) | Upotreba |
|---|---|---|
| DNS | example.com | Konverzija imena domene u UUID |
| DNS | google.com | Svaka web stranica ima jedinstven UUID |
| URL | https://example.com/page | Konverzija URL-a u UUID |
| URL | https://api.example.com/users/123 | API krajnja tačka kao UUID |
| OID | 1.3.6.1.4.1.343 | Objektni identifikator u UUID |
| X.500 | CN=John Doe,O=Company | Distinguished Name u UUID |
Važne karakteristike:
- ✅ Determinističko: Isti ulaz = uvijek isti UUID
- ✅ Ponovljivo: Možete ponovo kreirati UUID u bilo kojem trenutku
- ✅ Konzistentno: Isti UUID u različitim sistemima
- ❌ Nije moguće dekodirati: Iz UUID-a se ne može dobiti originalni naziv
- ℹ️ Jedan UUID: Za v3/v5 se uvijek generiše samo jedan UUID (isti ulaz = isti izlaz)
Praktična upotreba:
// Primjer: Konverzija URL-a u UUID v5
Namespace: URL
Naziv: https://example.com/api/users/123
Rezultat: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Isti ulaz = uvijek isti UUID
Namespace: DNS
Naziv: google.com
Rezultat: uvijek isti UUID za google.com
Kako sigurno koristiti UUID?
Kriptografska sigurnost
Naš generator koristi crypto.getRandomValues(), što je kriptografski siguran generator nasumičnih brojeva. Za razliku od Math.random(), koji je predvidiv i nepogodan za sigurnosne svrhe, crypto.getRandomValues() pruža stvarnu entropiju pogodnu za:
- Generisanje sigurnosnih tokena
- ID-evi sesija
- API ključevi
- Kriptografske aplikacije
Poređenje verzija UUID-a
| Verzija | Osnova | Kolizija | Vremensko sortiranje | DB performanse | Upotreba |
|---|---|---|---|---|---|
| v1 | Vremenska oznaka + MAC | Niska | ✅ Da | ❌ Lošije | Naslijeđeno, revizija |
| v3 | MD5 heš | Nijedna (deterministička) | ❌ Ne | ⚠️ Srednje | Konverzije (naslijeđeno) |
| v4 | Nasumično | Izuzetno niska | ❌ Ne | ⚠️ Srednje | Opšta upotreba |
| v5 | SHA-1 heš | Nijedna (deterministička) | ❌ Ne | ⚠️ Srednje | Konverzije (preporučeno) |
| v6 | Poređana vremenska oznaka | Niska | ✅ Da | ✅ Bolje | Moderna DB sa vremenom |
| v7 | Unix vremenska oznaka | Niska | ✅ Da | ✅ Najbolje | Novi projekti |
UUID vs drugi identifikatori
| Tip | Veličina | Kolizija | Vremensko sortiranje | Upotreba |
|---|---|---|---|---|
| Auto-increment ID | 4-8 bajtova | Garantovano jedinstveno unutar tabele | ❌ | Jednostavne aplikacije, lokalne DB |
| UUID v4 | 16 bajtova | Praktično nemoguća | ❌ | Distribuirani sistemi, API |
| UUID v7 | 16 bajtova | Praktično nemoguća | ✅ | Moderna DB sa performansama |
| ULID | 16 bajtova | Praktično nemoguća | ✅ | UUID + leksikografsko sortiranje |
| Snowflake ID | 8 bajtova | Garantovano jedinstveno uz pravilnu konfiguraciju | ✅ | Twitter, distribuirani sistemi |
| NanoID | Konfigurabilna | Zavisi od dužine | ❌ | URL-friendly ID-ovi |
Implementacija u različitim jezicima
JavaScript/TypeScript
// UUID v4 - Najjednostavniji način (moderni pretraživači)
const uuid = crypto.randomUUID();
// UUID v4 - Ručna implementacija
function generateUUIDv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
const v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
// UUID v7 - Preporučeno za baze podataka
function generateUUIDv7() {
const timestamp = Date.now();
const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');
const randomBytes = crypto.getRandomValues(new Uint8Array(10));
const randomHex = Array.from(randomBytes)
.map(b => b.toString(16).padStart(2, '0'))
.join('');
return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}
Python
import uuid
# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
# UUID v1
uuid_v1 = str(uuid.uuid1())
Java
import java.util.UUID;
// UUID v4
String uuidV4 = UUID.randomUUID().toString();
PHP
// UUID v4 (PHP 7+)
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
C#
using System;
// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();
Best Practices
Pohranjivanje UUID-a u bazi podataka
PostgreSQL:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
MySQL 8.0+:
CREATE TABLE users (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Savjet: U MySQL-u pohranjujte UUID kao BINARY(16) umjesto CHAR(36) za uštedu prostora i brže indeksiranje.
Validacija UUID-a
function isValidUUID(uuid) {
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return regex.test(uuid);
}
Konverzija UUID-a
// Uklanjanje crtica
const compact = uuid.replace(/-/g, '');
// Dodavanje crtica nazad
function formatUUID(compactUuid) {
return [
compactUuid.substring(0, 8),
compactUuid.substring(8, 12),
compactUuid.substring(12, 16),
compactUuid.substring(16, 20),
compactUuid.substring(20, 32)
].join('-');
}
Rješavanje problema (Troubleshooting)
UUID v3/v5 ne radi
Problem: Nakon odabira v3 ili v5 ništa se ne generiše
Rješenje:
- ✅ Provjerite jeste li popunili polje “Naziv” - obavezno je!
- ✅ Odaberite ispravan namespace prema tipu vašeg unosa
- ✅ Primjeri validnih unosa:
- DNS:
example.com,google.com - URL:
https://example.com/page - Bilo koji tekst:
moja-aplikacija-v1
- DNS:
Savjet: Pokušajte prvo jednostavnu vrijednost kao test i namespace DNS.
Vremenski UUID (v1, v6, v7) ima čudno vrijeme
Problem: Generisani UUID ima neočekivanu vremensku oznaku
Rješenje:
- ✅ Provjerite alat za odabir datuma i vremena - je li postavljeno ispravno vrijeme?
- ✅ Alat za odabir datuma i vremena koristi vašu lokalnu vremensku zonu
- ✅ Ostavite alat za odabir datuma i vremena prazan za trenutno vrijeme
UUID se ne može kopirati
Problem: Dugme “Kopiraj sve” ne radi
Rješenje:
- ✅ Provjerite jeste li generisali UUID (nisu prazni)
- ✅ Neki pretraživači zahtijevaju HTTPS za clipboard API
- ✅ Alternativno, odaberite tekst u tekstualnom polju i kopirajte ručno (Ctrl+C)
Često postavljana pitanja (FAQ)
Može li doći do kolizije UUID-a?
Teoretski da, ali vjerovatnoća je astronomski mala. Pri generisanju 1 milijarde UUID v4 u sekundi tokom 100 godina, šansa za koliziju je približno 0,00000006%. U praksi se kolizija nikada neće desiti.Je li UUID pogodan kao primarni ključ u bazi podataka?
Zavisi od slučaja upotrebe. UUID je idealan za distribuirane sisteme i situacije kada vam je potrebna globalna jedinstvenost. Za jednostavne aplikacije sa jednom bazom podataka, auto-increment može biti efikasniji.Jesu li UUID-ovi generisani ovim alatom sigurni?
Da, koristimo Web Crypto API (`crypto.getRandomValues()`), koje pruža kriptografski sigurne nasumične vrijednosti. Sve se odvija lokalno u vašem pretraživaču.Koja je razlika između verzija UUID-a?
- **v1**: Vremenska oznaka + MAC/nasumično - hronološko sortiranje, lošije performanse baze podataka - **v3/v5**: Heš-bazirano - determinističko, za konverzije poznatih identifikatora - **v4**: Nasumično - najsigurnije, najčešće korišteno - **v6**: Preuređena vremenska oznaka - bolje performanse baze podataka od v1 - **v7**: Unix vremenska oznaka - najbolje performanse baze podataka + vremensko sortiranjeKoju verziju UUID-a bih trebao koristiti?
Za većinu slučajeva koristite **v4** (nasumično). Za baze podataka sa vremenskim sortiranje koristite **v7** (moderno) ili **v6** (standard). Za konverzije poznatih identifikatora (URL, DNS) koristite **v5** (SHA-1).Mogu li koristiti UUID za tokene i API ključeve?
UUID v4 je pogodan za ID-eve sesija i slične tokene. Za API ključeve razmislite o korištenju dužih nasumičnih stringova (npr. 256-bitne vrijednosti) ili specijalizovanih biblioteka.Koliko su veliki UUID-ovi?
UUID ima 128 bita (16 bajtova). U string formatu sa crticama zauzima 36 znakova. Bez crtica 32 heksadecimalna znaka.Alternative za UUID
ULID (Universally Unique Lexicographically Sortable Identifier)
- 128-bitni ID (isto kao UUID)
- Leksikografski se može sortirati prema vremenu kreiranja
- Kompaktnija reprezentacija (26 znakova umjesto 36)
- Case-insensitive base32 kodiranje
Primjer: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- Manja veličina od UUID-a (standardno 21 znak)
- URL-friendly (bez specijalnih znakova)
- Brže generisanje
- Konfigurabilna dužina i abeceda
Primjer: V1StGXR8_Z5jdHi6B-myT
Snowflake ID (Twitter)
- 64-bitni ID (manji od UUID-a)
- Vremenski se može sortirati
- Sadrži ID radnika i redni broj
- Zahtijeva centralizovanu konfiguraciju
Primjer: 1234567890123456789
Performanse i optimizacija
Brzina generisanja
Naš generator može generisati:
- 1 UUID: < 1 ms
- 100 UUID: ~10-20 ms
- 1000 UUID: ~100-200 ms
Savjeti za performanse
- Batch generisanje – Ako vam je potrebno mnogo UUID-a, generišite ih odjednom umjesto pojedinačno
- Pohranjivanje u DB – Indeksirajte UUID kolone za brzo pretraživanje
- Kompresija – Pohranjujte UUID u binarnom obliku (16 bajtova) umjesto stringa (36 bajtova)
- Keširanje – U nekim slučajevima možete prethodno generisati i keširati UUID-ove
Za programere
Struktura UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 bita nasumičnih podataka (čvor)
| | | └────── 16 bita nasumičnih podataka sa varijantom (clock_seq)
| | └─────────── 12 bita nasumičnih podataka + 4 bita verzije (time_hi_and_version)
| └──────────────── 16 bita nasumičnih podataka (time_mid)
└───────────────────────── 32 bita nasumičnih podataka (time_low)
- Verzija (4 bita): uvijek
0100(binarno) =4(heksadecimalno) - Varijanta (2-3 bita): uvijek
10(binarno) za RFC 4122
Testiranje UUID-a
// Jest test
describe('UUID Generator', () => {
test('generates valid UUID v4', () => {
const uuid = generateUUIDv4();
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
expect(regex.test(uuid)).toBe(true);
});
test('generates unique UUIDs', () => {
const uuid1 = generateUUIDv4();
const uuid2 = generateUUIDv4();
expect(uuid1).not.toBe(uuid2);
});
});
Sigurnosni aspekti
Šta ne raditi sa UUID-om
❌ Ne koristite UUID v1 za osjetljive aplikacije – Sadrži vremensku oznaku, što može biti sigurnosni rizik
❌ Ne koristite Math.random() za generisanje UUID-a – Nije kriptografski sigurno
❌ Ne oslanjajte se na UUID za autorizaciju – UUID se može pogoditi (iako sa ekstremno malom vjerovatnoćom)
❌ Ne pohranjujte UUID u kolačiće bez šifriranja – Koristite potpisane kolačiće ili JWT
Šta raditi
✅ Koristite UUID v4 za većinu slučajeva – Najveća entropija i sigurnost
✅ Kombinujte UUID sa drugim sigurnosnim mjerama – Za upravljanje sesijom koristite HTTPS, HttpOnly kolačiće i kratko vrijeme isteka
✅ Validirajte UUID na serveru – Uvijek provjerite format i verziju UUID-a
✅ Koristite kriptografski sigurne izvore nasumičnosti – crypto.getRandomValues() u pretraživaču, /dev/urandom na Linuxu
Zanimljivosti
- Broj mogućih UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undeciliona)
- Potrebna kolizija: Za 50% šanse za koliziju morate generisati 2.71 × 10^18 UUID-a (2.71 kvintiliona)
- Veličina svih mogućih UUID-a: Kada bismo svaki UUID pohranili kao 16 bajtova, cijeli prostor bi zauzeo 85 zetabajta (85 milijardi terabajta)
- Porijeklo: UUID je standardizovan kao dio DCE (Distributed Computing Environment) 1990. godine