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:

  1. Odaberite verziju v1, v6 ili v7
  2. Postavite datum i vrijeme pomoću alata za odabir datuma i vremena
  3. 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:

  1. Odaberite namespace prema tipu vašeg identifikatora
  2. Unesite naziv/vrijednost
  3. Generišite UUID

Primjeri:

NamespaceNaziv (ulaz)Upotreba
DNSexample.comKonverzija imena domene u UUID
DNSgoogle.comSvaka web stranica ima jedinstven UUID
URLhttps://example.com/pageKonverzija URL-a u UUID
URLhttps://api.example.com/users/123API krajnja tačka kao UUID
OID1.3.6.1.4.1.343Objektni identifikator u UUID
X.500CN=John Doe,O=CompanyDistinguished 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

VerzijaOsnovaKolizijaVremensko sortiranjeDB performanseUpotreba
v1Vremenska oznaka + MACNiska✅ Da❌ LošijeNaslijeđeno, revizija
v3MD5 hešNijedna (deterministička)❌ Ne⚠️ SrednjeKonverzije (naslijeđeno)
v4NasumičnoIzuzetno niska❌ Ne⚠️ SrednjeOpšta upotreba
v5SHA-1 hešNijedna (deterministička)❌ Ne⚠️ SrednjeKonverzije (preporučeno)
v6Poređana vremenska oznakaNiska✅ Da✅ BoljeModerna DB sa vremenom
v7Unix vremenska oznakaNiska✅ Da✅ NajboljeNovi projekti

UUID vs drugi identifikatori

TipVeličinaKolizijaVremensko sortiranjeUpotreba
Auto-increment ID4-8 bajtovaGarantovano jedinstveno unutar tabeleJednostavne aplikacije, lokalne DB
UUID v416 bajtovaPraktično nemogućaDistribuirani sistemi, API
UUID v716 bajtovaPraktično nemogućaModerna DB sa performansama
ULID16 bajtovaPraktično nemogućaUUID + leksikografsko sortiranje
Snowflake ID8 bajtovaGarantovano jedinstveno uz pravilnu konfiguracijuTwitter, distribuirani sistemi
NanoIDKonfigurabilnaZavisi od dužineURL-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:

  1. ✅ Provjerite jeste li popunili polje “Naziv” - obavezno je!
  2. ✅ Odaberite ispravan namespace prema tipu vašeg unosa
  3. ✅ Primjeri validnih unosa:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Bilo koji tekst: moja-aplikacija-v1

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:

  1. ✅ Provjerite alat za odabir datuma i vremena - je li postavljeno ispravno vrijeme?
  2. ✅ Alat za odabir datuma i vremena koristi vašu lokalnu vremensku zonu
  3. ✅ 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:

  1. ✅ Provjerite jeste li generisali UUID (nisu prazni)
  2. ✅ Neki pretraživači zahtijevaju HTTPS za clipboard API
  3. ✅ 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 sortiranje
Koju 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

  1. Batch generisanje – Ako vam je potrebno mnogo UUID-a, generišite ih odjednom umjesto pojedinačno
  2. Pohranjivanje u DB – Indeksirajte UUID kolone za brzo pretraživanje
  3. Kompresija – Pohranjujte UUID u binarnom obliku (16 bajtova) umjesto stringa (36 bajtova)
  4. 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čnosticrypto.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