Generator UUID | Ustvari edinstvene ID-je (v1-v7) brezplačno
Kaj je UUID?
UUID (Universally Unique Identifier) je 128-bitni identifikator, ki se uporablja v računalniških sistemih za edinstveno identifikacijo informacij. UUID je standardiziran v skladu z RFC 4122 in zaradi svoje ogromne entropije zagotavlja praktično nično verjetnost kolizije – to pomeni, da bosta dva neodvisno generirana UUID-ja skoraj zagotovo unikatna.
UUID ima standardno obliko: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, kjer je vsak x heksadecimalna številka (0-9, a-f), M označuje različico UUID in N označuje varianto.
Različice UUID
UUID v1 (Časovni žig + MAC naslov)
UUID v1 je zasnovan na trenutnem časovnem žigu (timestamp) in naključni vrednosti (v brskalniku namesto naslova MAC). Uporablja 100-nanosekundne intervale od 15. oktobra 1582 (Gregorijanski koledar).
Uporaba:
- Situacije, ko potrebujete kronološko razvrščanje UUID-jev
- Razhroščevanje in beleženje (UUID vsebuje informacije o času ustvarjanja)
- Distribuirani sistemi s časovno sinhronizacijo
Primer: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Prednosti:
- UUID-je je mogoče kronološko razvrščati po času ustvarjanja
- Uporabno za revizijo in razhroščevanje
- Vsebuje informacije o časovnem žigu
Slabosti:
- Potencialno varnostno tveganje – vsebuje časovni žig
- V brskalniku ne vsebuje dejanskega naslova MAC (nadomeščen z naključno vrednostjo)
- Slaba lokacija PB (časovni žig je v nizko-vrstnih bitih)
UUID v3 (MD5 zgoščena vrednost)
UUID v3 se generira z uporabo MD5 zgoščene vrednosti imenskega prostora UUID in imena. Deterministicno – isti imenski prostor + ime vedno ustvarita isti UUID.
Uporaba:
- Pretvorba URL-jev, imen DNS ali drugih identifikatorjev v UUID
- Situacije, ko potrebujete ponovljivo UUID
- Preslikava med različnimi identifikacijskimi sistemi
Primer: a3bb189e-8bf9-3888-9912-ace4e6543002
Prednosti:
- Deterministicno (enak vnos = enak izhod)
- Idealno za pretvorbo znanih identifikatorjev
- Brez kolizij za različne vnose
Slabosti:
- MD5 je zastarel algoritem (raje uporabite v5)
- Zahteva imenski prostor in ime
- Prvotnega vnosa ni mogoče pridobiti nazaj
UUID v4 (Naključno) - PRIPOROČENO
Najpogosteje uporabljena različica UUID. UUID v4 se generira izključno naključno z uporabo kriptografsko varnega generatorja naključnih števil (crypto.getRandomValues()).
Uporaba:
- Primarni ključi podatkovnih baz
- Identifikatorji sej (session IDs)
- Edinstvena imena datotek
- API žetoni
- Splošni nameni, kjer potrebujete zagotovljeno edinstven ID
Primer: f47ac10b-58cc-4372-a567-0e02b2c3d479
Prednosti:
- Maksimalna entropija in varnost
- Brez odvisnosti od časa ali sistemskih parametrov
- Najenostavnejša implementacija
Verjetnost kolizije: Pri generiranju 1 milijarde UUID-jev na sekundo v obdobju 100 let je verjetnost kolizije približno 0,00000006%.
UUID v5 (SHA-1 zgoščena vrednost)
UUID v5 je enak kot v3, vendar uporablja SHA-1 namesto MD5. Modernejša in varnejša alternativa v3.
Uporaba:
- Enako kot v3, vendar z boljšo varnostjo
- Prednost pred v3 za nove projekte
- Generiranje UUID-jev iz URL-jev, imen DNS, OID, X.500 DN
Primer: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Prednosti:
- Deterministicno
- SHA-1 je robustnejši od MD5
- Primerno za preslikavo med sistemi
Slabosti:
- SHA-1 prav tako velja za zastarelo (vendar še vedno varnejše od MD5)
- Zahteva imenski prostor in ime
UUID v6 (Urejen časovni žig)
UUID v6 je izboljšana različica v1 s preurejenimi časovnimi biti za boljše indeksiranje v podatkovnih bazah. Zasnovano za reševanje problemov z lokalnostjo v podatkovnih bazah.
Uporaba:
- Primarni ključi podatkovnih baz s časovnim razvrščanjem
- Sistemi, ki zahtevajo kronološko razvrščanje in zmogljivost PB
- Modernejša alternativa v1
Primer: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Prednosti:
- Boljša lokacija PB kot v1 (časovni žig v visoko-vrstnih bitih)
- Kronološko razvrščanje
- Združljivo s standardom UUID
Slabosti:
- Manj uporabljano kot v1/v4
- Še vedno vsebuje časovne informacije (varnostno tveganje)
UUID v7 (Unix časovni žig)
UUID v7 uporablja Unix časovni žig (milisekunde od leta 1970) + naključne bite. Najnovejša različica UUID z najboljšo lokacijo PB.
Uporaba:
- Sodobni primarni ključi podatkovnih baz
- Sistemi, ki zahtevajo zmogljivost + časovno razvrščanje
- Nadomestek za v1/v6 v novih projektih
Primer: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Prednosti:
- Najboljša lokacija PB med vsemi različicami
- Unix časovni žig je standarden
- Združuje prednosti naključnosti in časovnega razvrščanja
Slabosti:
- Relativno nova specifikacija (RFC 4122bis)
- Manj podprta v starejših sistemih
Katero različico UUID uporabiti?
Vodnik za odločanje
Potrebujete maksimalno varnost in naključnost? → Uporabite UUID v4 (najpogostejša izbira)
Potrebujete časovno razvrščanje in zmogljivost PB? → Uporabite UUID v7 (sodoben) ali UUID v6 (standarden)
Potrebujete ponovljiv UUID iz obstoječih identifikatorjev? → Uporabite UUID v5 (SHA-1) ali UUID v3 (MD5, starejši)
Potrebujete časovni žig in revizijsko sled? → Uporabite UUID v1 (starejši, slabša zmogljivost PB)
Podatkovne baze
Za nove projekte: UUID v7 ali v4
- v7 je idealen za časovno razvrščanje + zmogljivost
- v4 za maksimalno naključnost brez časovnih informacij
Za starejše sisteme: UUID v1 ali v6
- v6 ima boljšo lokacijo PB kot v1
- v1 je široko podprt
Prednosti UUID kot primarnega ključa:
- Globalna edinstvenost – Podatke iz različnih podatkovnih baz lahko združite brez konflikta
- Varnost – Za razliko od zaporednih ID-jev (1, 2, 3…) ni mogoče ugibati naslednjih vrednosti
- Distribuirani sistemi – UUID-je je mogoče generirati neodvisno na več strežnikih brez koordinacije
- Združevanje podatkovnih baz – Pri združitvi dveh podatkovnih baz ne pride do konfliktov
Slabosti:
- Večja velikost (16 bajtov proti 4-8 bajtom za celo število)
- Počasnejše indeksiranje v nekaterih podatkovnih bazah (za boljšo zmogljivost uporabite v6/v7)
- Manj berljivo za človeka
API in spletne storitve
- REST API – Edinstveni identifikatorji za vire
- GraphQL – Globalni identifikatorji za vozlišča
- Webhooki – Sledenje zahtevam in odgovorom
- Žetoni – ID-ji sej, žetoni za osvežitev
Datoteke in shranjevanje
- Imena datotek – Preprečevanje kolizij pri nalaganju
- S3/Cloud Storage – Edinstvene poti do objektov
- Ključi predpomnilnika – Identifikatorji v sistemih predpomnilnika
Frontend aplikacije
- React/Vue komponente – Edinstveni ključi za sezname
- Začasni ID-ji – ID-ji pred shranjevanjem v podatkovno bazo
- Lokalno shranjevanje – Ključi za shranjene podatke
- Aplikacije, ki delujejo najprej brez povezave – Generiranje ID-jev brez povezave s strežnikom
Napredne funkcije generatorja
Generiranje UUID z lastnim časom
Za časovno zasnovane različice (v1, v6, v7) lahko izberete poljuben časovni žig z uporabo izbirnika datuma in časa. To je uporabno za:
Testiranje:
- Simulacija UUID-jev, ustvarjenih v preteklosti
- Testiranje časovnega razvrščanja v podatkovnih bazah
- Reprodukcija UUID-jev za razhroščevanje
Migracija podatkov:
- Generiranje UUID-jev z zgodovinskimi časovnimi žigi
- Dopunjavanje podatkov s pravilnimi vrednostmi časovnih žigov
- Uvoz podatkov iz različnih časovnih obdobij
Revizija in skladnost:
- Rekonstrukcija UUID-jev glede na čas nastanka zapisa
- Retroaktivno generiranje identifikatorjev
Primer uporabe:
- Izberite različico v1, v6 ali v7
- Nastavite datum in čas z uporabo izbirnika datuma in časa
- Ustvarite UUID z lastnim časovnim žigom
UUID na osnovi zgoščene vrednosti (v3, v5)
Za deterministične UUID lahko uporabite različici v3 (MD5) ali v5 (SHA-1):
Kako uporabiti:
- Izberite imenski prostor glede na vrsto vašega identifikatorja
- Vnesite ime/vrednost
- Ustvarite UUID
Primeri:
| Imenski prostor | Ime (vnos) | Uporaba |
|---|---|---|
| DNS | example.com | Pretvorba imena domene v UUID |
| DNS | google.com | Vsako spletno mesto ima edinstven UUID |
| URL | https://example.com/page | Pretvorba URL v UUID |
| URL | https://api.example.com/users/123 | Končna točka API kot UUID |
| OID | 1.3.6.1.4.1.343 | Objektni identifikator v UUID |
| X.500 | CN=John Doe,O=Company | Razlikovalno ime v UUID |
Pomembne lastnosti:
- ✅ Deterministično: Enak vnos = vedno enak UUID
- ✅ Ponovljivo: UUID lahko kadar koli znova ustvarite
- ✅ Konsistentno: Enak UUID v različnih sistemih
- ❌ Ni mogoče dekodirati: Iz UUID ni mogoče pridobiti prvotnega imena
- ℹ️ En UUID: Za v3/v5 se vedno generira samo en UUID (enak vnos = enak izhod)
Praktična uporaba:
// Primer: Pretvorba URL v UUID v5
Namespace: URL
Ime: https://example.com/api/users/123
Rezultat: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Enak vnos = vedno enak UUID
Namespace: DNS
Ime: google.com
Rezultat: vedno enak UUID za google.com
Kako varno uporabljati UUID?
Kriptografska varnost
Naš generator uporablja crypto.getRandomValues(), ki je kriptografsko varen generator naključnih števil. Za razliko od Math.random(), ki je predvidljiv in neprimeren za varnostne namene, crypto.getRandomValues() zagotavlja resnično entropijo, primerno za:
- Generiranje varnostnih žetonov
- ID-ji sej
- API ključi
- Kriptografske aplikacije
Primerjava različic UUID
| Različica | Osnova | Kolizije | Časovno razvrščanje | Zmogljivost PB | Uporaba |
|---|---|---|---|---|---|
| v1 | Časovni žig + MAC | Nizka | ✅ Da | ❌ Slabše | Starejši, revizija |
| v3 | MD5 zgoščena vrednost | Ni (deterministicno) | ❌ Ne | ⚠️ Srednja | Pretvorbe (starejši) |
| v4 | Naključno | Izjemno nizka | ❌ Ne | ⚠️ Srednja | Splošna uporaba |
| v5 | SHA-1 zgoščena vrednost | Ni (deterministicno) | ❌ Ne | ⚠️ Srednja | Pretvorbe (priporočeno) |
| v6 | Urejen časovni žig | Nizka | ✅ Da | ✅ Boljše | Sodobna PB s časom |
| v7 | Unix časovni žig | Nizka | ✅ Da | ✅ Najboljše | Novi projekti |
UUID proti drugim identifikatorjem
| Vrsta | Velikost | Kolizije | Časovno razvrščanje | Uporaba |
|---|---|---|---|---|
| Auto-increment ID | 4-8 bajtov | Zagotovljeno edinstven znotraj tabele | ❌ | Enostavne aplikacije, lokalna PB |
| UUID v4 | 16 bajtov | Praktično nemogoča | ❌ | Distribuirani sistemi, API |
| UUID v7 | 16 bajtov | Praktično nemogoča | ✅ | Sodobna PB z zmogljivostjo |
| ULID | 16 bajtov | Praktično nemogoča | ✅ | UUID + leksikografsko razvrščanje |
| Snowflake ID | 8 bajtov | Zagotovljeno edinstven ob pravilni konfiguraciji | ✅ | Twitter, distribuirani sistemi |
| NanoID | Nastavljiva | Odvisno od dolžine | ❌ | URL-prijazni ID-ji |
Implementacija v različnih jezikih
JavaScript/TypeScript
// UUID v4 - Najenostavnejši način (sodobni brskalniki)
const uuid = crypto.randomUUID();
// UUID v4 - Roč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 - Priporočeno za podatkovne baze
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())
# Izhod: '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();
Najboljše prakse
Shranjevanje UUID v podatkovni bazi
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
);
Nasvet: V MySQL shranite UUID kot BINARY(16) namesto CHAR(36) za prihranek prostora in hitrejše indeksiranje.
Validacija UUID
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);
}
Pretvorba UUID
// Odstranjevanje pomišljajev
const compact = uuid.replace(/-/g, '');
// Dodajanje pomišljajev nazaj
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('-');
}
Reševanje težav (Odpravljanje napak)
UUID v3/v5 ne deluje
Problem: Po izbiri v3 ali v5 se nič ne generira
Rešitev:
- ✅ Preverite, da ste izpolnili polje “Ime” - je obvezno!
- ✅ Izberite pravilen imenski prostor glede na vrsto vašega vnosa
- ✅ Primeri veljavnih vnosov:
- DNS:
example.com,google.com - URL:
https://example.com/page - Kakršno koli besedilo:
moja-aplikacija-v1
- DNS:
Nasvet: Najprej poskusite z enostavno vrednostjo, kot je test, in imenskim prostorom DNS.
Časovni UUID (v1, v6, v7) ima čuden čas
Problem: Generiran UUID ima nepričakovan časovni žig
Rešitev:
- ✅ Preverite izbirnik datuma in časa - ali je nastavljen pravilen čas?
- ✅ Izbirnik datuma in časa uporablja vaš lokalni časovni pas
- ✅ Pustite izbirnik datuma in časa prazen za trenutni čas
UUID ni mogoče kopirati
Problem: Gumb “Kopiraj vse” ne deluje
Rešitev:
- ✅ Preverite, ali ste generirali UUID-je (ali niso prazni)
- ✅ Nekateri brskalniki zahtevajo HTTPS za API odložišča
- ✅ Alternativno izberite besedilo v tekstovnem polju in ga ročno kopirajte (Ctrl+C)
Pogosto zastavljena vprašanja (FAQ)
Ali lahko pride do kolizije UUID?
Teoretično da, vendar je verjetnost astronomsko majhna. Pri generiranju 1 milijarde UUID v4 na sekundo v obdobju 100 let je verjetnost kolizije približno 0,00000006%. V praksi do kolizije nikoli ne pride.Ali je UUID primeren kot primarni ključ v podatkovni bazi?
Odvisno od primera uporabe. UUID je idealen za distribuirane sisteme in situacije, ko potrebujete globalno edinstvenost. Za preproste aplikacije z eno podatkovno bazo je lahko avtomatsko povečevanje učinkovitejše.Ali so UUID-ji, ustvarjeni s tem orodjem, varni?
Da, uporabljamo Web Crypto API (`crypto.getRandomValues()`), ki zagotavlja kriptografsko varne naključne vrednosti. Vse se dogaja lokalno v vašem brskalniku.Kakšna je razlika med različicami UUID?
- **v1**: Časovni žig + MAC/naključno - kronološko razvrščanje, slabša zmogljivost PB - **v3/v5**: Na osnovi zgoščene vrednosti - deterministično, za pretvorbo znanih identifikatorjev - **v4**: Naključno - najvarnejše, najpogosteje uporabljeno - **v6**: Preurejen časovni žig - boljša zmogljivost PB kot v1 - **v7**: Unix časovni žig - najboljša zmogljivost PB + časovno razvrščanjeKatero različico UUID naj uporabim?
Za večino primerov uporabite **v4** (naključno). Za podatkovne baze s časovnim razvrščanjem uporabite **v7** (sodoben) ali **v6** (standarden). Za pretvorbo znanih identifikatorjev (URL, DNS) uporabite **v5** (SHA-1).Ali lahko uporabim UUID za žetone in ključe API?
UUID v4 je primeren za ID-je sej in podobne žetone. Za ključe API razmislite o uporabi daljših naključnih nizov (npr. 256-bitne vrednosti) ali specializiranih knjižnic.Kako veliki so UUID-ji?
UUID ima 128 bitov (16 bajtov). V formatu niza s pomišljaji zavzame 36 znakov. Brez pomišljajev 32 heksadecimalnih znakov.Alternative UUID
ULID (Universally Unique Lexicographically Sortable Identifier)
- 128-bitni ID (enako kot UUID)
- Leksikografsko razvrstljiv po času ustvarjanja
- Bolj kompaktna predstavitev (26 znakov namesto 36)
- Kodiranje base32, ki ne razlikuje velikih in malih črk
Primer: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- Manjša velikost kot UUID (standardno 21 znakov)
- URL-prijazno (brez posebnih znakov)
- Hitrejše generiranje
- Nastavljiva dolžina in abeceda
Primer: V1StGXR8_Z5jdHi6B-myT
Snowflake ID (Twitter)
- 64-bitni ID (manjši od UUID)
- Časovno razvrstljiv
- Vsebuje ID delavca in zaporedno številko
- Zahteva centralizirano konfiguracijo
Primer: 1234567890123456789
Zmogljivost in optimizacija
Hitrost generiranja
Naš generator lahko ustvari:
- 1 UUID: < 1 ms
- 100 UUID: ~10-20 ms
- 1000 UUID: ~100-200 ms
Nasveti za zmogljivost
- Serijsko generiranje – Če potrebujete veliko UUID-jev, jih generirajte vse naenkrat namesto posamezno
- Shranjevanje v PB – Indeksirajte stolpce UUID za hitro iskanje
- Kompresija – UUID-je shranite v binarni obliki (16 bajtov) namesto niza (36 bajtov)
- Predpomnjenje – V nekaterih primerih lahko UUID-je vnaprej generirate in jih shranite v predpomnilnik
Za razvijalce
Struktura UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 bitov naključnih podatkov (node)
| | | └────── 16 bitov naključnih podatkov z varianto (clock_seq)
| | └─────────── 12 bitov naključnih podatkov + 4 biti različice (time_hi_and_version)
| └──────────────── 16 bitov naključnih podatkov (time_mid)
└───────────────────────── 32 bitov naključnih podatkov (time_low)
- Različica (4 bite): vedno
0100(binarno) =4(heksadecimalno) - Varianta (2-3 bite): vedno
10(binarno) za RFC 4122
Testiranje UUID
// 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);
});
});
Varnostni vidiki
Česa ne smete početi z UUID
❌ Ne uporabljajte UUID v1 za občutljive aplikacije – Vsebuje časovni žig, kar je lahko varnostno tveganje
❌ Ne uporabljajte Math.random() za generiranje UUID – Ni kriptografsko varno
❌ Ne zanašajte se na UUID za avtorizacijo – UUID je mogoče uganiti (čeprav z izjemno majhno verjetnostjo)
❌ Ne shranjujte UUID v piškotke brez šifriranja – Uporabite podpisane piškotke ali JWT
Kaj storiti
✅ Uporabite UUID v4 za večino primerov – Najvišja entropija in varnost
✅ Kombinirajte UUID z drugimi varnostnimi ukrepi – Za upravljanje sej uporabite HTTPS, HttpOnly piškotke in kratek rok veljavnosti
✅ Validirajte UUID na strežniku – Vedno preverite format in različico UUID
✅ Uporabljajte kriptografsko varne vire naključnosti – crypto.getRandomValues() v brskalniku, /dev/urandom na Linuxu
Zanimivosti
- Število možnih UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undecilijonov)
- Potrebna kolizija: Za 50% verjetnost kolizije morate generirati 2.71 × 10^18 UUID (2.71 kvintilijonov)
- Velikost vseh možnih UUID: Če bi vsak UUID shranili kot 16 bajtov, bi celoten prostor zavzel 85 zettabajtov (85 milijard terabajtov)
- Izvor: UUID je bil standardiziran kot del DCE (Distributed Computing Environment) leta 1990