Generátor ULID

Generujte ULID online: 26-znakové identifikátory Crockford Base32 so 48-bitovým časom a 80 náhodnými bitmi.

Formát
Vygenerované ID
Pripravené. Generujte ULID priamo vo vašom prehliadači.

Ako sa tento identifikátor tvorí

Formát
26 znakov Crockford Base32: 10 časových znakov nasledovaných 16 náhodnými znakmi.
Entropia
80 náhodných bitov nasledujúcich po 48-bitovej milisekundovej časovej pečiatke.
Čas
Áno. Prvých 10 znakov kóduje čas v milisekundách, pričom lexikálne usporiadanie zodpovedá času vytvorenia.
Riziko kolízie
Náhodná koncová časť má 80 bitov; riziko kolízie závisí najmä od počtu identifikátorov vytvorených v rovnakej milisekunde.
Príklad
01M12BRQGBWTGCAK8CZ2P0CTSP

Vaše ID sa generujú lokálne pomocou bezpečnej náhodnosti prehliadača. Do služby BroBroGo sa nič neodosiela.

Často kladené otázky

Na čo je dobrý formát ULID?

ULID je kompaktný, vhodný pre URL a zoraditeľný podľa času ako čistý text, čo je užitočné pre logy, kľúče objektov a záznamy, ktoré sa majú radiť chronologicky.

Je ULID to isté ako UUID v7?

Nie. Hoci oba formáty obsahujú čas v milisekundách, ULID využíva kódovanie Crockford Base32 s 26 znakmi, zatiaľ čo UUID v7 si zachováva štandardný hexadecimálny tvar UUID.

Čo je ULID a ako funguje jeho vnútorná štruktúra

ULID (Universally Unique Lexicographically Sortable Identifier) je 26‑znakový reťazec, ktorý predstavuje 128‑bitovú hodnotu rozdelenú na dve časti. Prvých 10 znakov (48 bitov) kóduje časovú značku s milisekundovou presnosťou, zvyšných 16 znakov (80 bitov) tvorí náhodný komponent. Celá identifikátor je zapísaný pomocou Crockfordovej base32 abecedy – používa znaky 0‑9 a A‑Z s vynechaním písmen I, L, O, U, čím sa predchádza vizuálnej zámene (napríklad I a 1, O a 0). Výsledkom je identifikátor, ktorý je case‑insensitive (nezáleží na veľkosti písmen) a neobsahuje žiadne pomlčky ani iné oddeľovače.

Pre lepšiu predstavu: UUID v klasickom tvare hexadecimálneho reťazca s pomlčkami má 36 znakov, ULID je o desať znakov kratší. Skrátenie vzniká jednak odstránením pomlčiek a jednak použitím base32 namiesto hexadecimálneho kódovania – base32 zakóduje 5 bitov na jeden znak, zatiaľ čo hex kóduje iba 4 bity.

Časová značka v ULIDe udáva počet milisekúnd od začiatku epochy Unixu (1. januára 1970). Pretože prvých 10 znakov zodpovedá časovému údaju, ULIDy sú lexikograficky usporiadateľné podľa času vytvorenia – ak zoradíte reťazce abecedne, dostanete ich zoradené od najstaršieho po najmladší. Táto vlastnosť platí v rámci milisekúnd len čiastočne: ID vygenerované v rovnakej milisekunde nemajú garantované poradie, pretože zvyšných 80 bitov je náhodných.

Prečo je táto stránka odlišná – kľúčové vlastnosti ULID

Stránka na generovanie ULIDov sa od ostatných formátov (UUID, NanoID, CUID) odlišuje niekoľkými zásadnými faktormi:

  1. Dĺžka a čitateľnosť – 26 znakov oproti 36 pri UUID je citeľne kratších, čo uľahčuje manuálny prepis aj zobrazenie v stĺpcoch databáz.
  2. Case‑insensitive – pri kopírovaní alebo prepise nehrozí zámena veľkých a malých písmen, čo znižuje riziko chýb.
  3. Žiadne pomlčky – odpadá potreba odstraňovať alebo ignorovať oddeľovače, identifikátor je jeden súvislý reťazec.
  4. Časová usporiadateľnosť – vďaka vstavanej časovej značke je možné ULIDy triediť bez potreby samostatného stĺpca s časom, čo zjednodušuje návrh tabuliek.
  5. URL‑bezpečnosť bez escapovania – všetky použité znaky sú v RFC 3986 definované ako „unreserved“ (nezaberajú miesto v URI), takže ULID je možné vkladať priamo do URL adries bez percentuálneho kódovania.

Na rozdiel od iných častí toho istého nástroja (napríklad generátor UUID) na tejto stránke nenájdete prepínače pre veľké písmená ani pre pomlčky. Je to preto, že ULID je zo svojej podstaty case‑insensitive a štandardne sa zapisuje bez pomlčiek – akékoľvek prepínače by boli zbytočne matúce. Celá 128‑bitová entropia sa prenáša do 26 znakov, pričom 48 bitov nesie časovú informáciu a 80 bitov náhodnú zložku.

Ako generovať ULID pomocou tohto nástroja

Používateľské rozhranie je minimalistické. Vstupné parametre:

  • Formát – musí byť nastavený na „ULID“.
  • Počet – celé číslo od 1 do 100. Mimo tohto intervalu nástroj počet neakceptuje.

Po nastavení parametrov sa automaticky vygeneruje zoznam požadovaného počtu ULIDov. Každý ULID je zobrazený ako 26‑znakový reťazec. Pod zoznamom sa nachádza informácia o počte vygenerovaných identifikátorov a stavové hlásenia: „Ready.“ (východiskový stav), „Generated.“ (po vygenerovaní) a „Copied all!“ (keď používateľ skopíruje celý zoznam). Kliknutie na jednotlivý ULID ho skopíruje do schránky.

Dôležité: zmena ľubovoľnej voľby (formát, počet alebo iný parameter) automaticky spustí nové generovanie. Nie je potrebné kliknúť na tlačidlo „Generovať“ – systém reaguje okamžite. Celé generovanie prebieha výhradne v prehliadači s použitím crypto.getRandomValues(), čo zaručuje kryptograficky bezpečnú náhodnosť. Žiadne dáta nie sú odosielané na server a identifikátory nie sú nikde na strane servera ukladané ani logované.

Ak používateľ potrebuje 50 ULIDov, vyberie počet 50 a nástroj zobrazí 50 reťazcov. Ak niektorý z nich chce skopírovať samostatne, stačí naň kliknúť. Pre hromadné kopírovanie slúži tlačidlo (alebo automatická akcia), ktorá skopíruje celý zoznam a zobrazí hlásenie „Copied all!“. Stavové hlásenia sa menia aj v prípade, že používateľ prepne na iný formát – vtedy sa zoznam vyčistí a objaví sa „Ready.“.

Porovnanie s UUID: výhody a obmedzenia

Nižšie uvedená tabuľka porovnáva ULID s UUID verzie 4 (náhodné) a UUID verzie 7 (časovo usporiadateľné).

Vlastnosť ULID UUID v4 UUID v7
Dĺžka reťazca 26 znakov 36 znakov 36 znakov
Základné kódovanie Crockford base32 hexadecimálne hexadecimálne
Veľkosť písmen case‑insensitive case‑sensitive (zvyčajne malé) case‑sensitive (zvyčajne malé)
Pomlčky nie áno (4 miesta) áno (4 miesta)
Časová zložka 48 bitov (milisekundy) nie 48 bitov (milisekundy)
Náhodná zložka 80 bitov 122 bitov 74 bitov
Celková entropia 128 bitov 128 bitov 128 bitov
Triedenie podľa času lexikografické (áno) nie lexikografické (áno)
URL‑bezpečné bez escapovania áno áno (ale pomlčky) áno (ale pomlčky)
Použitie v databázových indexoch zlepšené (monotónne) náhodné (fragmentácia) zlepšené

Hlavná výhoda ULID oproti UUID v4 spočíva v usporiadateľnosti – pri vkladaní nových riadkov do B‑stromového indexu sa identifikátory vkladajú približne v chronologickom poradí, čo znižuje potrebu preskupovania stránok a zvyšuje výkon zápisu. Oproti UUID v7 je ULID kratší a nevyžaduje pomlčky, čo uľahčuje prácu v API a v používateľských rozhraniach.

Obmedzenia: Vzhľadom na 80‑bitovú náhodnú zložku je pravdepodobnosť kolízie pri generovaní v rámci tej istej milisekundy pomerne nízka. Ak sa však generuje veľmi veľa ID v jednej milisekunde (napríklad tisíce), teoretická pravdepodobnosť kolízie rastie. Pre kritické systémy s vysokou priepustnosťou je vhodné dôkladne vyhodnotiť riziko kolízie. Ďalšie obmedzenie: ULID negarantuje striktné poradie v rámci tej istej milisekundy – ak potrebujete absolútnu postupnosť, musíte doplniť sekvenčné číslo alebo použiť inú schému.

Praktické využitie ULID v databázach a API

V prostredí webových a mobilných aplikácií sa ULID uplatňuje najmä ako primárny kľúč. Keďže nové ULIDy sú približne monotónne rastúce, databázový index (B‑strom) nemusí pri každom vložení preskupovať veľké množstvo stránok, čo je častý problém pri náhodných UUID. To vedie k menšej fragmentácii a rýchlejšiemu zápisu.

Pre vývojárov API je atraktívne, že ULIDy sú krátke, neobsahujú pomlčky a sú case‑insensitive – klientom ich možno poskytnúť ako verejné ID bez obáv z nejednoznačnosti pri kopírovaní alebo manuálnom zadávaní. Systémoví architekti v distribuovaných prostrediach oceňujú, že identifikátor možno vygenerovať lokálne (bez centralizovaného generátora) a napriek tomu je jedinečný naprieč uzlami, pokiaľ každý uzol používa inú entropiu (napríklad pripojením identifikátora uzla k náhodnému komponentu).

Databázoví administrátori využívajú ULID najmä v prostrediach, kde doteraz používali klasické auto‑increment čísla, ale potrebujú identifikátory, ktoré sú globálne jedinečné a zároveň umožňujú triedenie. Výmena auto‑increment za ULID však vyžaduje zmenu dĺžky stĺpca a premyslenie spôsobu generovania (napríklad v aplikácii alebo v triggeri).

Bezpečnosť a súkromie – generovanie v prehliadači

Generovanie ULIDov prebieha výhradne na strane klienta, v JavaScriptovom prostredí prehliadača. Používa sa rozhranie crypto.getRandomValues(), ktoré poskytuje kryptograficky bezpečnú náhodnosť podľa špecifikácie Web Crypto API. To znamená, že kvalita náhodnosti je porovnateľná s generovaním na serveri – žiadny útočník nemôže predvídať hodnotu na základe slabého generátora.

Keďže sa nikam neposielajú žiadne dáta (ani vygenerované ID, ani vstupné parametre), stránka negeneruje žiadny sieťový prenos. To je zásadný rozdiel oproti online generátorom, ktoré posielajú požiadavku na server. Súkromie používateľa je tak chránené aj pri citlivých projektoch – ULIDy nie je možné vystopovať späť k relácii.

V praxi to znamená, že ak generujete ULIDy pre testovacie alebo produkčné účely na svojom lokálnom počítači, nikto iný nemá k týmto hodnotám prístup. Samozrejme, ak ULIDy použijete v databáze alebo ich odošlete v API, stávajú sa verejnými – ale samotný nástroj ich nezverejňuje.

FAQ – najčastejšie otázky o ULID

Je ULID prísne časovo zoradený?

Nie. Lexikografické poradie zodpovedá časovej značke s milisekundovou presnosťou, ale identifikátory vygenerované v rovnakej milisekunde môžu byť v ľubovoľnom poradí. Pre absolútne poradie je potrebné doplniť sekvenčné číslo.

Môžem použiť ULID ako priamy náhradu za UUID v databáze?

Áno, ale treba upraviť dĺžku stĺpca na 26 znakov (pri textovom uložení) alebo použiť binárny typ (16 bajtov). Pri prechode z UUID na ULID sa zmení aj spôsob generovania – je vhodné zabezpečiť, aby nové záznamy používali rovnakú logiku.

Aká je pravdepodobnosť kolízie ULIDov?

Pravdepodobnosť závisí od počtu vygenerovaných ID v jednej milisekunde. Pri 80‑bitovej náhodnej zložke a generovaní 1 000 ID v rovnakej milisekunde je pravdepodobnosť aspoň jednej kolízie približne 10⁻¹⁸. Pre väčšinu praktických situácií je zanedbateľná.

Prečo ULID nepoužíva pomlčky?

Pomlčky nie sú súčasťou špecifikácie ULID. Identifikátor je navrhnutý ako súvislý reťazec, aby sa zjednodušilo kopírovanie, zobrazovanie a používanie v URI. Prípadné rozdelenie na skupiny (napríklad pre lepšiu čitateľnosť) je len vizuálna úprava, nie súčasť formátu.

Je ULID vhodný pre verejné API?

Áno, pretože je URL‑bezpečný bez escapovania a case‑insensitive. Používatelia ho môžu jednoducho skopírovať z e‑mailu, z dokumentácie alebo z odpovede API bez rizika chyby spôsobenej zamenou I/1 alebo O/0.

Ktoré znaky sú v ULID vynechané a prečo?

Crockfordova base32 abeceda vynecháva I, L, O, U (a tiež ich malé ekvivalenty). Dôvodom je eliminovať vizuálnu zámenu: I a 1, L a 1, O a 0, U a V. Výsledkom je znaková sada, ktorú je možné bezpečne ručne prepisovať aj pri nejasnom písme.