Generátor UUID online | V1, V3-V7, náhodné, časové
Čo je UUID?
UUID (Universally Unique Identifier) je 128-bitový identifikátor používaný v počítačových systémoch na jedinečnú identifikáciu informácií. UUID je štandardizované podľa RFC 4122 a vďaka svojej obrovskej entropii zaručuje prakticky nulovú pravdepodobnosť kolízie – to znamená, že dva nezávisle vygenerované UUID budú takmer určite unikátne.
UUID má štandardný formát: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, kde každé x je hexadecimálne číslo (0-9, a-f), M označuje verziu UUID a N označuje variantu.
Verzie UUID
UUID v1 (Časová pečiatka + MAC adresa)
UUID v1 je založené na aktuálnej časovej pečiatke (timestamp) a náhodnej hodnote (v prehliadači namiesto MAC adresy). Používa 100-nanosekundové intervaly od 15. októbra 1582 (Gregoriánsky kalendár).
Použitie:
- Situácie, keď potrebujete chronologické radenie UUID
- Debugging a logovanie (UUID obsahuje informáciu o čase vytvorenia)
- Distribuované systémy s časovou synchronizáciou
Príklad: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Výhody:
- UUID možno radiť chronologicky podľa času vytvorenia
- Užitočné pre audit a debugging
- Obsahuje informáciu o časovej pečiatke
Nevýhody:
- Potenciálne bezpečnostné riziko – obsahuje časovú pečiatku
- V prehliadači neobsahuje skutočnú MAC adresu (nahradené náhodnou hodnotou)
- Zlá DB lokalita (časová pečiatka je v low-order bitoch)
UUID v3 (MD5 hash)
UUID v3 je generované pomocou MD5 hashu namespace UUID a názvu. Deterministické – rovnaký namespace + názov vždy vytvorí rovnaké UUID.
Použitie:
- Prevody URL, DNS názvov alebo iných identifikátorov na UUID
- Situácie, keď potrebujete reprodukovateľné UUID
- Mapovanie medzi rôznymi identifikačnými systémami
Príklad: a3bb189e-8bf9-3888-9912-ace4e6543002
Výhody:
- Deterministické (rovnaký vstup = rovnaký výstup)
- Ideálne pre prevody známych identifikátorov
- Žiadna kolízia pre rôzne vstupy
Nevýhody:
- MD5 je zastaraný algoritmus (preferujte v5)
- Vyžaduje namespace a name
- Nie je možné získať späť pôvodný vstup
UUID v4 (Náhodné) - ODPORÚČANÉ
Najpoužívanejšia verzia UUID. UUID v4 je generované čisto náhodne pomocou kryptograficky bezpečného generátora náhodných čísel (crypto.getRandomValues()).
Použitie:
- Databázové primárne kľúče
- Identifikátory relácií (session ID)
- Unikátne názvy súborov
- API tokeny
- Všeobecné účely, kde potrebujete zaručene unikátne ID
Príklad: f47ac10b-58cc-4372-a567-0e02b2c3d479
Výhody:
- Maximálna entropia a bezpečnosť
- Žiadna závislosť od času alebo systémových parametrov
- Najjednoduchšia implementácia
Pravdepodobnosť kolízie: Pri generovaní 1 miliardy UUID za sekundu po dobu 100 rokov je šanca na kolíziu približne 0,00000006%.
UUID v5 (SHA-1 hash)
UUID v5 je rovnaké ako v3, ale používa SHA-1 namiesto MD5. Modernejšia a bezpečnejšia alternatíva k v3.
Použitie:
- Rovnaké ako v3, ale s lepšou bezpečnosťou
- Preferované pred v3 pre nové projekty
- Generovanie UUID z URL, DNS názvov, OID, X.500 DN
Príklad: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Výhody:
- Deterministické
- SHA-1 je robustnejší ako MD5
- Vhodné pre mapovanie medzi systémami
Nevýhody:
- SHA-1 je tiež považované za zastarané (ale stále bezpečnejšie ako MD5)
- Vyžaduje namespace a name
UUID v6 (Zoradená časová pečiatka)
UUID v6 je vylepšená verzia v1 s preusporiadanými časovými bitmi pre lepšie DB indexovanie. Navrhnuté na riešenie problémov s lokalitou v databázach.
Použitie:
- Databázové primárne kľúče s časovým radením
- Systémy vyžadujúce chronologické radenie aj DB výkon
- Modernejšia alternatíva k v1
Príklad: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Výhody:
- Lepšia DB lokalita ako v1 (časová pečiatka v high-order bitoch)
- Chronologické radenie
- Kompatibilné s UUID štandardom
Nevýhody:
- Menej používané ako v1/v4
- Stále obsahuje časové informácie (bezpečnostné riziko)
UUID v7 (Unix časová pečiatka)
UUID v7 používa Unix časovú pečiatku (milisekundy od 1970) + náhodné bity. Najnovšia verzia UUID s najlepšou DB lokalitou.
Použitie:
- Moderné databázové primárne kľúče
- Systémy vyžadujúce výkon + časové radenie
- Náhrada za v1/v6 v nových projektoch
Príklad: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Výhody:
- Najlepšia DB lokalita zo všetkých verzií
- Unix časová pečiatka je štandardná
- Kombinuje výhody náhodnosti a časového radenia
Nevýhody:
- Relatívne nová špecifikácia (RFC 4122bis)
- Menej podporovaná v legacy systémoch
Ktorú verziu UUID použiť?
Rozhodovací sprievodca
Potrebujete maximálnu bezpečnosť a náhodnosť? → Použite UUID v4 (najbežnejšia voľba)
Potrebujete časové radenie a DB výkon? → Použite UUID v7 (moderné) alebo UUID v6 (štandard)
Potrebujete reprodukovateľné UUID z existujúcich identifikátorov? → Použite UUID v5 (SHA-1) alebo UUID v3 (MD5, legacy)
Potrebujete časovú pečiatku a audit trail? → Použite UUID v1 (legacy, horší DB výkon)
Databázy
Pre nové projekty: UUID v7 alebo v4
- v7 je ideálne pre časové radenie + výkon
- v4 pre maximálnu náhodnosť bez časových informácií
Pre legacy systémy: UUID v1 alebo v6
- v6 má lepšiu DB lokalitu ako v1
- v1 je široko podporovaný
Výhody UUID ako primárneho kľúča:
- Globálna unikátnosť – Môžete spájať dáta z rôznych databáz bez konfliktu
- Bezpečnosť – Na rozdiel od sekvenčných ID (1, 2, 3…) nie je možné odhadnúť ďalšie hodnoty
- Distribuované systémy – UUID možno generovať nezávisle na viacerých serveroch bez koordinácie
- Zlúčenie databáz – Pri zlúčení dvoch databáz nevznikajú konflikty
Nevýhody:
- Väčšia veľkosť (16 bytov vs 4-8 bytov pre integer)
- Pomalšie indexovanie v niektorých databázach (používajte v6/v7 pre lepší výkon)
- Menej čitateľné pre človeka
API a webové služby
- REST API – Unikátne identifikátory pre zdroje (resources)
- GraphQL – Globálne identifikátory pre uzly (nodes)
- Webhooky – Sledovanie požiadaviek a odpovedí
- Tokeny – Session ID, refresh tokeny
Súbory a úložisko
- Názvy súborov – Prevencia kolízií pri nahrávaní
- S3/Cloud Storage – Unikátne cesty k objektom
- Cache keys – Identifikátory v cache systémoch
Frontend aplikácie
- React/Vue komponenty – Unikátne kľúče pre zoznamy (lists)
- Temporary ID – ID pred uložením do databázy
- Local storage – Kľúče pre uložené dáta
- Offline-first aplikácie – Generovanie ID bez pripojenia k serveru
Pokročilé funkcie generátora
Generovanie UUID s vlastným časom
Pre verzie založené na čase (v1, v6, v7) môžete vybrať ľubovoľnú časovú pečiatku pomocou date-time pickeru. To je užitočné pre:
Testovanie:
- Simulácia UUID vytvorených v minulosti
- Testovanie časového radenia v databázach
- Reprodukcia UUID pre debugging
Migrácia dát:
- Generovanie UUID s historickými časovými pečiatkami
- Doplňovanie dát s korektnými hodnotami časových pečiatok
- Import dát z rôznych časových období
Audit a súlad:
- Rekonštrukcia UUID podľa času vzniku záznamu
- Retroaktívne generovanie identifikátorov
Príklad použitia:
- Vyberte verziu v1, v6 alebo v7
- Nastavte dátum a čas pomocou date-time pickeru
- Vygenerujte UUID s vašou vlastnou časovou pečiatkou
Hash-based UUID (v3, v5)
Pre deterministické UUID môžete použiť verzie v3 (MD5) alebo v5 (SHA-1):
Ako použiť:
- Vyberte namespace podľa typu vášho identifikátora
- Zadajte názov/hodnotu
- Vygenerujte UUID
Príklady:
| Namespace | Názov (vstup) | Použitie |
|---|---|---|
| DNS | example.com | Prevod doménového mena na UUID |
| DNS | google.com | Každý web má unikátne UUID |
| URL | https://example.com/page | Prevod URL na UUID |
| URL | https://api.example.com/users/123 | API endpoint ako UUID |
| OID | 1.3.6.1.4.1.343 | Object Identifier na UUID |
| X.500 | CN=John Doe,O=Company | Distinguished Name na UUID |
Dôležité vlastnosti:
- ✅ Deterministické: Rovnaký vstup = vždy rovnaké UUID
- ✅ Reprodukovateľné: Môžete UUID znovu vytvoriť kedykoľvek
- ✅ Konzistentné: Rovnaké UUID naprieč rôznymi systémami
- ❌ Nemožno dekódovať: Z UUID nie je možné získať späť pôvodný názov
- ℹ️ Jedno UUID: Pre v3/v5 sa generuje vždy iba jedno UUID (rovnaký vstup = rovnaký výstup)
Praktické použitie:
// Príklad: Prevod URL na UUID v5
Namespace: URL
Názov: https://example.com/api/users/123
Výsledok: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Rovnaký vstup = vždy rovnaké UUID
Namespace: DNS
Názov: google.com
Výsledok: vždy rovnaké UUID pre google.com
Ako bezpečne používať UUID?
Kryptografická bezpečnosť
Náš generátor používa crypto.getRandomValues(), čo je kryptograficky bezpečný generátor náhodných čísel. Na rozdiel od Math.random(), ktorý je predvídateľný a nevhodný pre bezpečnostné účely, crypto.getRandomValues() poskytuje skutočnú entropiu vhodnú pre:
- Generovanie bezpečnostných tokenov
- Session ID
- API kľúče
- Kryptografické aplikácie
Porovnanie verzií UUID
| Verzia | Základ | Kolízia | Časové radenie | DB výkon | Použitie |
|---|---|---|---|---|---|
| v1 | Timestamp + MAC | Nízka | ✅ Áno | ❌ Horší | Legacy, audit |
| v3 | MD5 hash | Žiadna (deterministické) | ❌ Nie | ⚠️ Stredný | Prevody (legacy) |
| v4 | Náhodné | Extrémne nízka | ❌ Nie | ⚠️ Stredný | Všeobecné použitie |
| v5 | SHA-1 hash | Žiadna (deterministické) | ❌ Nie | ⚠️ Stredný | Prevody (odporúčané) |
| v6 | Zoradený timestamp | Nízka | ✅ Áno | ✅ Lepší | Moderné DB s časom |
| v7 | Unix timestamp | Nízka | ✅ Áno | ✅ Najlepší | Nové projekty |
UUID vs iné identifikátory
| Typ | Veľkosť | Kolízia | Časové radenie | Použitie |
|---|---|---|---|---|
| Auto-increment ID | 4-8 bytov | Garantovane unikátne v rámci tabuľky | ❌ | Jednoduché aplikácie, lokálne DB |
| UUID v4 | 16 bytov | Prakticky nemožná | ❌ | Distribuované systémy, API |
| UUID v7 | 16 bytov | Prakticky nemožná | ✅ | Moderné DB s výkonom |
| ULID | 16 bytov | Prakticky nemožná | ✅ | UUID + lexikografické radenie |
| Snowflake ID | 8 bytov | Garantovane unikátne pri správnej konfigurácii | ✅ | Twitter, distribuované systémy |
| NanoID | Konfigurovateľná | Závisí od dĺžky | ❌ | URL-friendly ID |
Implementácia v rôznych jazykoch
JavaScript/TypeScript
// UUID v4 - Najjednoduchší spôsob (moderné prehliadače)
const uuid = crypto.randomUUID();
// UUID v4 - Manuálna implementácia
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 - Odporúčané pre databázy
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();
Osvedčené postupy (Best Practices)
Ukladanie UUID v databáze
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
);
Tip: V MySQL ukladajte UUID ako BINARY(16) namiesto CHAR(36) pre úsporu miesta a rýchlejšie indexovanie.
Validácia 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);
}
Konverzia UUID
// Odstránenie pomlčiek
const compact = uuid.replace(/-/g, '');
// Pridanie pomlčiek späť
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('-');
}
Riešenie problémov (Troubleshooting)
UUID v3/v5 nefunguje
Problém: Po výbere v3 alebo v5 sa nič negeneruje
Riešenie:
- ✅ Skontrolujte, že ste vyplnili pole “Názov” - je povinné!
- ✅ Vyberte správny namespace podľa typu vášho vstupu
- ✅ Príklady platných vstupov:
- DNS:
example.com,google.com - URL:
https://example.com/page - Akýkoľvek text:
moja-aplikacia-v1
- DNS:
Tip: Skúste najprv jednoduchú hodnotu ako test a namespace DNS.
Časové UUID (v1, v6, v7) má zvláštny čas
Problém: Vygenerované UUID má neočakávanú časovú pečiatku
Riešenie:
- ✅ Skontrolujte date-time picker - je nastavený správny čas?
- ✅ Date-time picker používa vašu lokálnu časovú zónu
- ✅ Nechajte date-time picker prázdny pre aktuálny čas
UUID sa nedá skopírovať
Problém: Tlačidlo “Kopírovať všetko” nefunguje
Riešenie:
- ✅ Skontrolujte, že ste vygenerovali UUID (nie sú prázdne)
- ✅ Niektoré prehliadače vyžadujú HTTPS pre clipboard API
- ✅ Alternatívne vyberte text v textarea a skopírujte ručne (Ctrl+C)
Často kladené otázky (FAQ)
Môže dôjsť ku kolízii UUID?
Teoreticky áno, ale pravdepodobnosť je astronomicky malá. Pri generovaní 1 miliardy UUID v4 za sekundu po dobu 100 rokov je šanca na kolíziu približne 0,00000006%. V praxi k nej nikdy nedôjde.Je UUID vhodné ako primárny kľúč v databáze?
Záleží od prípadu použitia. UUID je ideálne pre distribuované systémy a situácie, keď potrebujete globálnu unikátnosť. Pre jednoduché aplikácie s jednou databázou môže byť auto-increment efektívnejší.Sú UUID vygenerované týmto nástrojom bezpečné?
Áno, používame Web Crypto API (`crypto.getRandomValues()`), ktoré poskytuje kryptograficky bezpečné náhodné hodnoty. Všetko prebieha lokálne vo vašom prehliadači.Aký je rozdiel medzi verziami UUID?
- **v1**: Časová pečiatka + MAC/náhodné - chronologické radenie, horší DB výkon - **v3/v5**: Hash-based - deterministické, pre prevody známych identifikátorov - **v4**: Náhodné - najbezpečnejšie, najpoužívanejšie - **v6**: Preusporiadaná časová pečiatka - lepší DB výkon ako v1 - **v7**: Unix časová pečiatka - najlepší DB výkon + časové radenieKtorú verziu UUID by som mal použiť?
Pre väčšinu prípadov použite **v4** (náhodné). Pre databázy s časovým radením použite **v7** (moderné) alebo **v6** (štandard). Pre prevody známych identifikátorov (URL, DNS) použite **v5** (SHA-1).Môžem použiť UUID pre tokeny a API kľúče?
UUID v4 je vhodné pre session ID a podobné tokeny. Pre API kľúče zvážte použitie dlhších náhodných stringov (napr. 256-bit hodnoty) alebo špecializovaných knižníc.Aké veľké sú UUID?
UUID má 128 bitov (16 bytov). Vo formáte string s pomlčkami zaberie 36 znakov. Bez pomlčiek 32 hexadecimálnych znakov.Alternatívy k UUID
ULID (Universally Unique Lexicographically Sortable Identifier)
- 128-bitové ID (rovnako ako UUID)
- Lexikograficky zoraditeľné podľa času vytvorenia
- Kompaktnejšia reprezentácia (26 znakov namiesto 36)
- Case-insensitive base32 kódovanie
Príklad: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- Menšia veľkosť ako UUID (štandardne 21 znakov)
- URL-friendly (bez špeciálnych znakov)
- Rýchlejšie generovanie
- Konfigurovateľná dĺžka a abeceda
Príklad: V1StGXR8_Z5jdHi6B-myT
Snowflake ID (Twitter)
- 64-bitové ID (menšie ako UUID)
- Časovo zoraditeľné
- Obsahuje worker ID a sequence number
- Vyžaduje centralizovanú konfiguráciu
Príklad: 1234567890123456789
Výkon a optimalizácia
Rýchlosť generovania
Náš generátor dokáže vygenerovať:
- 1 UUID: < 1 ms
- 100 UUID: ~10-20 ms
- 1000 UUID: ~100-200 ms
Tipy pre výkon
- Batch generovanie – Ak potrebujete veľa UUID, generujte ich naraz namiesto po jednom
- Ukladanie v DB – Indexujte UUID stĺpce pre rýchle vyhledávání
- Kompresia – Ukladajte UUID v binárnej podobe (16 bytov) namiesto stringu (36 bytov)
- Caching – V niektorých prípadoch môžete UUID predgenerovať a cachovať
Pre vývojárov
Štruktúra UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 bitov náhodných dát (node)
| | | └────── 16 bitov náhodných dát s variantom (clock_seq)
| | └─────────── 12 bitov náhodných dát + 4 bity verzie (time_hi_and_version)
| └──────────────── 16 bitov náhodných dát (time_mid)
└───────────────────────── 32 bitov náhodných dát (time_low)
- Verzia (4 bity): vždy
0100(binárne) =4(hex) - Variant (2-3 bity): vždy
10(binárne) pre RFC 4122
Testovanie 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);
});
});
Bezpečnostné aspekty
Čo nerobiť s UUID
❌ Nepoužívajte UUID v1 pre citlivé aplikácie – Obsahuje časovú pečiatku, čo môže byť bezpečnostné riziko
❌ Nepoužívajte Math.random() na generovanie UUID – Nie je kryptograficky bezpečné
❌ Nespoliehajte sa na UUID pre autorizáciu – UUID možno uhádnuť (aj keď s extrémne malou pravdepodobnosťou)
❌ Neukladajte UUID v cookies bez šifrovania – Použite podpísané cookies alebo JWT
Čo robiť
✅ Používajte UUID v4 pre väčšinu prípadov – Najvyššia entropia a bezpečnosť
✅ Kombinujte UUID s ďalšími bezpečnostnými opatreniami – Pre správu relácií použite HTTPS, HttpOnly cookies a krátku exspiráciu
✅ Validujte UUID na serveri – Vždy kontrolujte formát a verziu UUID
✅ Používajte kryptograficky bezpečné zdroje náhodnosti – crypto.getRandomValues() v prehliadači, /dev/urandom na Linuxe
Zaujímavosti
- Počet možných UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undeciliónov)
- Potrebná kolízia: K 50% šanci na kolíziu musíte vygenerovať 2.71 × 10^18 UUID (2.71 quintiliónov)
- Veľkosť všetkých možných UUID: Keby sme každé UUID uložili ako 16 bytov, zabral by celý priestor 85 zettabytov (85 miliárd terabajtov)
- Pôvod: UUID bol štandardizovaný ako súčasť DCE (Distributed Computing Environment) v roku 1990