Generátor UUID v4
Tento nástroj vytvára UUID identifikátory verzie 4 – náhodné, 36‑znakové reťazce v štandardnom 8‑4‑4‑4‑12 hexadecimálnom formáte. Ovládate počet (1 až 100), či sa majú písmená zobrazovať ako veľké (A–F), a či sa majú zahrnúť spojovníky. Identifikátory sa objavia okamžite vo vašom prehliadači; jeden kliknutím skopírujete, všetky naraz tlačidlom.
Čím sa táto stránka odlišuje
Každý vygenerovaný UUID v4 používa 122 bitov čisto náhodných dát – zvyšných 6 bitov je pevne určených pre verziu (0100) a variant (10). Táto konštrukcia je definovaná v RFC 4122. Oproti časovo zoradeným formátom (UUID v7, ULID) nemajú UUID v4 žiadnu časovú zložku. Výsledkom je, že hodnoty netriedia podľa času – radia sa v náhodnom poradí. Ak ich použijete ako primárny kľúč v databáze s B‑stromovým indexom, dochádza k fragmentácii indexu, pretože nové záznamy sa vkladajú na náhodné miesta v strome. To znižuje výkon zápisu a zvyšuje réžiu údržby indexu.
Pravdepodobnosť kolízie (dvoch rovnakých UUID) je zanedbateľná pre všetky praktické účely. Pri 122 bitoch náhodnosti je riziko, že pri generovaní 1 miliardy UUID narazíte na kolíziu, približne 5,3 × 10⁻¹⁰ – v podstate nulové.
Na rozdiel od iných typov identifikátorov na tejto stránke (napríklad UUID v7, ULID, NanoID) majú UUID v4 špecifické prepínače formátu: prepínač pre veľké písmená a prepínač pre spojovníky. Iné formáty používajú odlišné ovládacie prvky.
Štruktúra UUID verzie 4
UUID v4 má presne 128 bitov. Tie sa delia na:
| Pole | Počet bitov | Účel |
|---|---|---|
| Časové pole | 60 | náhodné (pôvodne čas, tu náhoda) |
| Verzia | 4 | pevne 0100 (hodnota 4) |
| Variant | 2 | pevne 10 (RFC 4122) |
| Náhodné | 62 | náhodné |
V praxi je teda 122 bitov náhodných a 6 bitov pevných. Výsledný reťazec v kanonickom tvare vyzerá takto:
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Každé x predstavuje náhodnú hexadecimálnu číslicu (0–9, a–f). 4 je pevná verzia. y predstavuje náhodnú číslicu, ktorá má ale horné dva bity vždy 10 – takže y môže byť len 8, 9, a alebo b.
Príklad vygenerovaného UUID:
f47ac10b-58cc-4372-a567-0e02b2c3d479
Ak prepínač "Include hyphens" vypnete, spojovníky sa odstránia a vznikne 32‑znakový hex reťazec:
f47ac10b58cc4372a5670e02b2c3d479
Pravdepodobnosť kolízie
122 bitov náhodnosti znamená, že priestor možných hodnôt je 2¹²² ≈ 5,3 × 10³⁶. Pre predstavu: ak by ste každú sekundu vygenerovali 1 miliardu UUID, trvalo by v priemere 1,7 × 10²⁰ rokov, kým by ste s 50 % pravdepodobnosťou narazili na jednu kolíziu. V praxi je riziko také malé, že sa považuje za nulové.
Táto vlastnosť robí UUID v4 vhodné pre distribuované systémy, kde jednotlivé uzly nemôžu centrálne koordinovať prideľovanie identifikátorov. Každý uzol si môže vytvárať vlastné UUID bez rizika konfliktu.
Vplyv na databázové indexy
Hoci je kolízia nepravdepodobná, náhodné poradie UUID v4 prináša dôležitý kompromis. Pri použití ako primárneho kľúča v relačnej databáze (napríklad PostgreSQL, MySQL, SQL Server) sa nové záznamy vkladajú na náhodné miesta v indexe.
B‑stromový index funguje tak, že nové kľúče nenasledujú za sebou – musia sa vložiť do správneho listu na základe poradia. Pri náhodných hodnotách to znamená, že nové záznamy sú roztrúsené po celom indexe. To spôsobuje:
- Fragmentáciu indexu (veľa nevyužitých stránok)
- Časté rozdeľovanie listových uzlov
- Vyššiu réžiu pri zápise
- Pomerne vyššie zaťaženie vyrovnávacej pamäte
Ak očakávate veľmi vysoký počet zápisov (milióny alebo miliardy záznamov) a potrebujete časovo zoradené kľúče, zvážte UUID v7, ktoré kombinuje časovú zložku s náhodnými bitmi, alebo monoterne sa zvyšujúce identifikátory (napríklad sekvencie či auto‑increment).
Porovnanie s inými formátmi
| Vlastnosť | UUID v4 | UUID v7 | ULID |
|---|---|---|---|
| Náhodné bity | 122 | 74 | 80 |
| Časová zložka | žiadna | 48 bitov (milisekundy) | 48 bitov (milisekundy) |
| Poradie | náhodné | časovo rastúce | časovo rastúce |
| Veľkosť | 128 bitov | 128 bitov | 128 bitov |
| Kolízie | extrémne zriedkavé | extrémne zriedkavé (v rámci jednej milisekundy náhodné) | extrémne zriedkavé |
UUID v4 je najvhodnejšie pre bezpečnostné aplikácie, kde nechcete, aby niekto odhadol poradie identifikátorov (napríklad API tokeny, session ID). UUID v7 je lepšie pre databázy, kde potrebujete časové poradie a indexovú lokalitu.
Formátovanie a prispôsobenie
Prepínač "Uppercase" mení hexadecimálne písmená z malých (a–f) na veľké (A–F). Niektoré systémy (napríklad Windows) používajú veľké písmená; iné (Linux, webové aplikácie) vyžadujú malé. Táto voľba nemení samotné dáta – ide len o vizuálnu reprezentáciu.
Prepínač "Include hyphens" odstraňuje spojovníky. Výsledkom je 32‑znakový reťazec, ktorý je kompaktnejší a vhodný napríklad do URL, API parametrov alebo súborových názvov. Bez spojovníkov je identifikátor o 4 znaky kratší, ale ťažšie čitateľný pre ľudí.
Generovanie v prehliadači
Všetky identifikátory sa generujú lokálne v prehliadači pomocou rozhrania crypto.randomUUID() alebo ekvivalentného generátora náhodných bitov. Žiadne dáta sa neposielajú na server. To znamená:
- nulové oneskorenie (okamžitý výsledok)
- žiadne riziko úniku citlivých údajov
- funguje aj offline (po prvom načítaní stránky)
Tento prístup je v súlade s modernými bezpečnostnými odporúčaniami – náhodné identifikátory by sa nikdy nemali generovať na strane servera bez silného kryptografického generátora.
Časté otázky (FAQ)
Je UUID v4 skutočne náhodné? Áno. Používa kryptograficky silný generátor náhodných čísel (CSPRNG). Každé UUID je nezávislé a nepredvídateľné.
Môžem použiť UUID v4 ako primárny kľúč? Áno, ale uvedomte si vplyv na výkon indexu pri veľmi veľkých tabuľkách. Pre malé tabuľky (do niekoľkých miliónov záznamov) je to zvyčajne v poriadku. Pre masívne zápisy zvážte UUID v7.
Prečo má UUID v4 pevné bity? RFC 4122 definuje verziu (4) a variant (10) pre identifikáciu formátu. Tieto bity sú pevné, aby softvér vedel, že ide o v4 a nie o inú verziu.
Ako sa líši UUID v4 od náhodného 128‑bitového čísla? UUID v4 má 6 pevných bitov, takže nemá plných 128 bitov náhodnosti. Na druhej strane je štandardizovaný a rozpoznateľný podľa formátu.
Je bezpečné generovať UUID v4 na klientskej strane?
Áno, ak používate crypto.randomUUID(). Je to štandardný API poskytovaný prehliadačmi, ktorý je kryptograficky bezpečný.
Môžem vygenerovať viac ako 100 UUID naraz?
Tento nástroj podporuje maximálne 100. Pre väčšie množstvo by ste mali použiť programové riešenie (napríklad Node.js s balíčkom uuid).