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:

  1. Vyberte verziu v1, v6 alebo v7
  2. Nastavte dátum a čas pomocou date-time pickeru
  3. 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ť:

  1. Vyberte namespace podľa typu vášho identifikátora
  2. Zadajte názov/hodnotu
  3. Vygenerujte UUID

Príklady:

NamespaceNázov (vstup)Použitie
DNSexample.comPrevod doménového mena na UUID
DNSgoogle.comKaždý web má unikátne UUID
URLhttps://example.com/pagePrevod URL na UUID
URLhttps://api.example.com/users/123API endpoint ako UUID
OID1.3.6.1.4.1.343Object Identifier na UUID
X.500CN=John Doe,O=CompanyDistinguished 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

VerziaZákladKolíziaČasové radenieDB výkonPoužitie
v1Timestamp + MACNízka✅ Áno❌ HoršíLegacy, audit
v3MD5 hashŽiadna (deterministické)❌ Nie⚠️ StrednýPrevody (legacy)
v4NáhodnéExtrémne nízka❌ Nie⚠️ StrednýVšeobecné použitie
v5SHA-1 hashŽiadna (deterministické)❌ Nie⚠️ StrednýPrevody (odporúčané)
v6Zoradený timestampNízka✅ Áno✅ LepšíModerné DB s časom
v7Unix timestampNízka✅ Áno✅ NajlepšíNové projekty

UUID vs iné identifikátory

TypVeľkosťKolíziaČasové radeniePoužitie
Auto-increment ID4-8 bytovGarantovane unikátne v rámci tabuľkyJednoduché aplikácie, lokálne DB
UUID v416 bytovPrakticky nemožnáDistribuované systémy, API
UUID v716 bytovPrakticky nemožnáModerné DB s výkonom
ULID16 bytovPrakticky nemožnáUUID + lexikografické radenie
Snowflake ID8 bytovGarantovane unikátne pri správnej konfiguráciiTwitter, distribuované systémy
NanoIDKonfigurovateľnáZávisí od dĺžkyURL-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:

  1. ✅ Skontrolujte, že ste vyplnili pole “Názov” - je povinné!
  2. ✅ Vyberte správny namespace podľa typu vášho vstupu
  3. ✅ Príklady platných vstupov:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Akýkoľvek text: moja-aplikacia-v1

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:

  1. ✅ Skontrolujte date-time picker - je nastavený správny čas?
  2. ✅ Date-time picker používa vašu lokálnu časovú zónu
  3. ✅ 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:

  1. ✅ Skontrolujte, že ste vygenerovali UUID (nie sú prázdne)
  2. ✅ Niektoré prehliadače vyžadujú HTTPS pre clipboard API
  3. ✅ 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é radenie
Ktorú 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

  1. Batch generovanie – Ak potrebujete veľa UUID, generujte ich naraz namiesto po jednom
  2. Ukladanie v DB – Indexujte UUID stĺpce pre rýchle vyhledávání
  3. Kompresia – Ukladajte UUID v binárnej podobe (16 bytov) namiesto stringu (36 bytov)
  4. 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áhodnosticrypto.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