Generátor Nano ID: Proč je 21 znaků lepších než 36 a jak si ho přizpůsobit
Tento nástroj generuje unikátní identifikátory ve formátu Nano ID. Na rozdíl od UUID (36 znaků) nebo ULID (26 znaků) používá Nano ID ve výchozím nastavení pouze 21 znaků, přičemž nabízí srovnatelnou odolnost proti kolizím. Hlavní rozdíl oproti pevným formátům je úplná přizpůsobitelnost: délku identifikátoru nastavíte v rozmezí od 2 do 36 znaků, abecedu povolených znaků si definujete sami. Změna libovolného parametru okamžitě regeneruje všechny ID. Generování probíhá čistě lokálně v prohlížeči pomocí crypto.getRandomValues, žádná data neopouštějí váš počítač.
Parametry a jejich chování
Nástroj nabízí tři vstupní parametry, které společně určují výsledné ID:
- Počet ID – číselná hodnota od 1 do 100. Nástroj vygeneruje přesně tolik unikátních identifikátorů, kolik zadáte.
- Délka – slider s výchozí hodnotou 21, rozsah 2–36. Každý posuvník změní délku všech právě zobrazených ID.
- Abeceda – editovatelné textové pole, ve výchozím stavu obsahuje URL‑bezpečné znaky (písmena A–Z, a–z, číslice 0–9 a pomlčku
-). Musí obsahovat alespoň 2 různé znaky.
Změna libovolného parametru – ať už posunutím slideru, přepsáním abecedy nebo úpravou počtu – automaticky spustí nové generování. Není potřeba mačkat žádné tlačítko „Generovat“. Stavové hlášky informují o průběhu: „Připraveno.“ (výchozí stav), „Vygenerováno.“ (po úspěšném vygenerování), „Zkopírováno vše!“ (po hromadném zkopírování). Pokud je abeceda neplatná, zobrazí se chybová hláška: „Abeceda musí obsahovat alespoň 2 různé znaky.“ a výsledky se vymažou.
Proč je výchozí délka 21 znaků a co se stane, když ji změníte
Autor Nano ID zvolil výchozí délku 21 znaků jako kompromis mezi délkou identifikátoru a pravděpodobností kolize. Při použití výchozí abecedy (64 URL‑bezpečných znaků) a délky 21 znaků je počet možných kombinací 64²¹, což je zhruba 1,3 × 10³⁸. Pro srovnání: UUID verze 4 (RFC 4122) má 122 bitů náhodných dat, tedy 2¹²² možností – přibližně 5,3 × 10³⁶. Nano ID s 21 znaky tedy nabízí větší prostor než běžné UUID, přitom je o 15 znaků kratší.
Zkrácení délky snižuje počet možných kombinací a zvyšuje riziko kolize. Pokud například zvolíte délku 10 znaků a stejnou abecedu (64 znaků), máte 64¹⁰ ≈ 1,15 × 10¹⁸ možností – to je stále obrovské číslo, ale pro systémy s miliardami záznamů už nemusí být bezpečné. Naopak prodloužení na 36 znaků poskytne 64³⁶ ≈ 1,0 × 10⁶⁵ kombinací, což je zbytečné pro drtivou většinu aplikací a pouze zvětšuje velikost řetězce.
Parametr délky je přizpůsobitelný proto, že různé scénáře vyžadují různé kompromisy mezi délkou a kolizní odolností. QR kódy, URL zkracovače nebo tokeny pro e‑mailové potvrzení často vyžadují co nejkratší ID, zatímco databázové primární klíče snesou delší identifikátory výměnou za vyšší bezpečnost.
Abeceda: proč musí mít alespoň 2 znaky a jak ji využít
Editovatelné pole abecedy je výchozí výhodou Nano ID oproti UUID. Můžete omezit znaky pouze na číslice (např. 0123456789), pouze na velká písmena bez nejednoznačných znaků (např. ABCDEFGHJKLMNPQRSTUVWXYZ), nebo naopak použít všechna písmena a číslice včetně speciálních znaků.
Abeceda musí obsahovat alespoň 2 různé znaky. Pokud ji zúžíte na jediný znak (např. A), nástroj nemůže vygenerovat unikátní ID – každé ID by vypadalo stejně (např. AAAA...). V takovém případě se výsledky vymažou, počet ID se nastaví na 0 a tlačítko „Kopírovat vše“ se deaktivuje. Tato hraniční situace je ošetřena explicitně, protože jinak by generátor produkoval nekonečnou smyčku shodných řetězců.
Velikost abecedy přímo ovlivňuje počet možných ID při dané délce. Vzorec je jednoduchý: počet možných ID = (velikost abecedy)^(délka). Pokud zvolíte abecedu o 10 znacích a délku 5, máte 10⁵ = 100 000 možných ID. Pokud stejnou abecedu zkombinujete s délkou 8, máte 10⁸ = 100 000 000 možností. Při výběru abecedy pro konkrétní aplikaci vždy spočítejte, zda je tento prostor dostatečný pro očekávaný počet záznamů a tolerovatelné riziko kolize.
Jak probíhá generování a proč je bezpečné
Generátor používá JavaScriptové API crypto.getRandomValues, které v prohlížeči zajišťuje kryptograficky bezpečný zdroj náhodných dat. Tento přístup je zásadní pro ID, která slouží jako tokeny, session klíče nebo jiné bezpečnostní prvky. Na rozdíl od Math.random() poskytuje crypto.getRandomValues skutečně nepředvídatelné hodnoty, které nelze spočítat ani odhadnout.
Veškeré zpracování probíhá lokálně v prohlížeči – ID se nikam neodesílají, neukládají na server a nejsou sdílena s třetími stranami. To je důležité pro scénáře, kde je vyžadováno soukromí nebo kde by odeslání ID na server představovalo bezpečnostní riziko (např. při generování resetovacích tokenů).
Algoritmus pro generování konkrétního ID funguje následovně: pro každý znak ID se vygeneruje náhodné číslo v rozsahu 0 až (velikost abecedy - 1), a poté se vybere odpovídající znak z abecedy. Tento proces se opakuje (délka)krát pro každé ID a (počet)krát pro všechny ID. Všechna ID jsou unikátní – generátor kontroluje, že se neopakují.
Srovnání s UUID a ULID
| Formát | Výchozí délka | Znaky | Počet možných kombinací (výchozí) | Algoritmus |
|---|---|---|---|---|
| Nano ID | 21 | URL‑bezpečné (64) | 64²¹ ≈ 1,3 × 10³⁸ | Náhodný výběr z abecedy |
| UUID (v4) | 36 | hexadecimální (16) + pomlčky | 2¹²² ≈ 5,3 × 10³⁶ | Náhodná 122‑bitová hodnota |
| ULID | 26 | base32 (32) | 32²⁶ ≈ 1,0 × 10³⁹ | Časová značka + náhodná část |
Nano ID je kratší než UUID, ale nabízí větší kombinatorický prostor. ULID je ještě o něco větší, ale obsahuje časovou složku, což ho činí předvídatelným v čase (není vhodné pro tokeny, ale pro primární klíče s řazením). Nano ID je čistě náhodné, tedy vhodné pro bezpečnostní účely.
Kdy Nano ID použít – typické scénáře
- URL zkracovače: 21 znaků je přijatelná délka pro QR kódy i sdílené odkazy. Můžete délku snížit na 10–12 znaků, pokud nečekáte miliardy unikátních odkazů.
- Webové tokeny: resetovací odkazy, potvrzovací e‑maily, session klíče – kryptograficky bezpečné, lokální generování neexponuje data.
- Databázové primární klíče: kratší než UUID (8–16 bytů v binární podobě oproti 16 bytům UUID), snazší indexování a ukládání. Umožňují volbu abecedy bez nejednoznačných znaků (např. bez
1,l,I). - Identifikátory zboží, objednávek nebo účtenek: možnost omezit se jen na číslice nebo velká písmena pro snadné čtení a ruční zadávání.
FAQ k Nano ID generátoru
Proč je výchozí délka Nano ID 21?
21 znaků poskytuje kombinatorický prostor větší než UUID (verze 4), přitom je o 15 znaků kratší. Je to empiricky nalezený kompromis mezi krátkým identifikátorem a minimálním rizikem kolize při miliardách ID.
Mohu použít pouze číslice jako abecedu?
Ano, do pole abecedy zadejte například 0123456789. Generátor vytvoří ID pouze z těchto znaků. Pamatujte ale, že při délce 21 a 10 znacích je počet možných ID 10²¹, což je 1×10²¹ – pro většinu aplikací dostačující.
Je Nano ID bezpečné pro databázové klíče?
Ano, pokud ho nekombinujete s předvídatelným seedem. Náhodná ID generovaná crypto.getRandomValues jsou bezpečná. Nevýhodou oproti auto‑increment klíčům je možnost kolize (i když extrémně nízká) a nemožnost řazení podle času vytvoření. Pro řazení použijte samostatný timestamp sloupec.
Co se stane, když abeceda obsahuje jen jeden znak?
Generátor zobrazí chybu: „Abeceda musí obsahovat alespoň 2 různé znaky.“, vymaže výsledky a deaktivuje tlačítko „Kopírovat vše“. ID s jedním znakem v abecedě nelze smysluplně vygenerovat – všechna by byla totožná.
Jaký je rozdíl mezi Nano ID a UUID?
Nano ID je kratší (21 vs 36), používá URL‑bezpečný znakový set (lze upravit), je generován lokálně v prohlížeči bez serverové podpory a jeho délku i abecedu si můžete plně přizpůsobit. UUID má pevnou strukturu a standardizovaný formát (RFC 4122), ale je delší a méně flexibilní.
Kolik ID mohu vygenerovat najednou?
Minimálně 1, maximálně 100. Generátor kontroluje unikátnost – při malém kombinatorickém prostoru (např. délka 2 a abeceda 5 znaků = 25 možných ID) by generování 100 ID selhalo, protože by nestačil prostor. V praxi se to projeví tak, že generátor vyprodukuje méně ID, než je požadováno (až do vyčerpání všech možných kombinací).