Čo je Nano ID a prečo ho generovať práve tu
Táto stránka generuje jedinečné identifikátory vo formáte Nano ID. Na rozdiel od UUID, ktoré má pevne danú dĺžku 36 znakov (s pomlčkami, reálne 32 hexadecimálnych znakov), alebo ULID s dĺžkou 26 znakov, ponúka Nano ID predvolenú dĺžku 21 znakov. Táto dĺžka je výrazne kratšia ako UUID, pričom si zachováva porovnateľnú odolnosť voči kolíziám. Hlavný rozdiel oproti bežným generátorom ID je v tom, že obe parametre – dĺžku aj abecedu – si môžete plne prispôsobiť. Dĺžku je možné nastaviť v rozsahu 2 až 36 znakov (sliderom, predvolene 21). Abeceda je editovateľné textové pole, ktoré štandardne obsahuje URL-bezpečné znaky. Zmena ktoréhokoľvek parametra okamžite spustí nové generovanie ID, takže výsledky vidíte v reálnom čase.
Ako nástroj funguje – vstupné parametre a pravidlá
Vstupné parametre sú štyri: formát (vždy Nano ID), počet ID, dĺžka a abeceda. Počet ID môže byť 1 až 100, dĺžka 2 až 36. Abeceda musí obsahovať aspoň 2 rôzne znaky. Ak zmeníte abecedu na jediný znak, stane sa niekoľko vecí naraz: všetky vygenerované ID sa vymažú, počet ID sa zmení na 0 a tlačidlo „Kopírovať všetky“ sa zakáže. Táto logika je zámerná – s jedným znakom nie je možné vygenerovať rôzne ID, takže nástroj predchádza chybovému stavu.
Generovanie prebieha výhradne lokálne v prehliadači pomocou crypto.getRandomValues(). Nič sa neposiela na server BroBroGo, čo je dôležité pre súkromie a bezpečnosť. Stavové správy sú štyri:
- Ready. (nečinný stav)
- Generated. (po úspešnom vygenerovaní)
- Copied all! (po skopírovaní všetkých ID)
- Alphabet needs at least 2 different characters. (chyba pri neplatnej abecede)
Každé jednotlivé ID je možné skopírovať kliknutím naň. Tlačidlo „Kopírovať všetky“ funguje len vtedy, keď je počet ID väčší ako 0. Všetky ID sú pri každej zmene parametrov okamžite regenerované. Môžete si tak vyskúšať rôzne kombinácie dĺžky a abecedy a okamžite vidieť výsledok.
Ako sa generujú ID – lokálne a bezpečne
Nano ID nepoužíva náhodné čísla z JavaScriptu (Math.random), ktoré sú predvídateľné, ale crypto.getRandomValues(). Táto metóda poskytuje kryptograficky bezpečný náhodný generátor, čo znamená, že ID sú neuhádnuteľné aj pri veľkom počte vygenerovaných hodnôt. Pretože celý proces beží v prehliadači, žiadny server nemá prístup k vygenerovaným ID – ani k ich počtu, ani k nastaveniam. Je to dôležité napríklad pri generovaní tokenov na resetovanie hesla alebo pri vytváraní unikátnych kľúčov, ktoré nesmú byť odhalené tretej strane.
Odolnosť voči kolíziám je daná dvoma faktormi: dĺžkou ID a veľkosťou abecedy. Predvolená URL-bezpečná abeceda obsahuje 64 znakov: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_. Počet možných ID pri dĺžke 21 a abecede 64 znakov je 64^21, čo je približne 1,5 × 10^38. Pre porovnanie, UUID verzie 4 (náhodné) má 2^122 možných hodnôt (približne 5,3 × 10^36). Nano ID s predvoleným nastavením teda poskytuje takmer o dva rády viac možných kombinácií ako UUID v4. Pri dĺžke 36 a rovnakej abecede je to už 64^36 ≈ 1,7 × 10^65, čo je prakticky nemožné prekonať.
Porovnanie Nano ID s UUID a ULID
Nižšie uvedená tabuľka sumarizuje kľúčové rozdiely:
| Vlastnosť | Nano ID | UUID (verzia 4) | ULID |
|---|---|---|---|
| Predvolená dĺžka | 21 znakov | 36 znakov (s pomlčkami) | 26 znakov |
| Prispôsobiteľná dĺžka | Áno (2–36) | Nie (pevná) | Nie (pevná) |
| Prispôsobiteľná abeceda | Áno (min. 2 znaky) | Nie (pevná hexadecimálna) | Nie (Crockford base32) |
| URL-bezpečnosť | Áno (predvolene znaky bez pomlčiek) | Nie (obsahuje pomlčky) | Áno (len veľké písmená a číslice) |
| Počet možných hodnôt (predvolene) | 64^21 ≈ 1,5×10^38 | 2^122 ≈ 5,3×10^36 | 32^26 ≈ 2,6×10^39 |
| Časová zložka | Nie | Nie (v4 je čisto náhodné) | Áno (prvých 10 znakov je timestamp) |
Pre webové API, QR kódy alebo databázové kľúče je dôležitá kompaktnosť. Nano ID s 21 znakmi zaberá menej miesta v URL, v databáze aj pri prenose. ULID (26 znakov) je dlhší, ale obsahuje časovú zložku, čo umožňuje zoradenie podľa času. UUID (36 znakov) je najdlhší a bez prispôsobenia abecedy nie je URL-bezpečný. Nano ID je jediné z týchto troch, ktoré umožňuje meniť dĺžku aj abecedu, čím ho môžete prispôsobiť presným požiadavkám vašej aplikácie.
Ako si zvoliť správnu dĺžku a abecedu
Pri výbere dĺžky a abecedy treba zvážiť kompromis medzi kompaktnosťou a odolnosťou voči kolíziám. Vzorec na výpočet počtu možných ID je jednoduchý: počet možností = (veľkosť abecedy)^(dĺžka). Napríklad:
- Abeceda s 10 znakmi (číslicami 0–9) a dĺžka 6 dáva len 10^6 = 1 milión možností. Pre databázu s miliónmi záznamov by hrozila kolízia.
- Predvolená URL-bezpečná abeceda (64 znakov) a dĺžka 10 dáva 64^10 ≈ 1,2×10^18 možností – to je už pre väčšinu aplikácií viac než dosť.
- Maximálne nastavenie: 36 znakov a 64 znakov abecedy dáva 64^36 ≈ 1,7×10^65, čo je prakticky nekonečné.
Praktické odporúčania:
- Pre krátke odkazy (napr. URL skracovač) stačí dĺžka 6–8 znakov a URL-bezpečná abeceda. Ak používate len číslice, dĺžka musí byť dlhšia.
- Pre databázové primárne kľúče je bezpečná dĺžka 12–16 znakov s URL-bezpečnou abecedou. Vyhnete sa tak kolíziám aj pri miliardách záznamov.
- Pre tokeny na resetovanie hesla alebo iné bezpečnostné tokeny použite dĺžku aspoň 21 znakov. Kryptografická náhodnosť v prehliadači je postačujúca.
- Vlastnú abecedu môžete upraviť tak, aby neobsahovala znaky, ktoré sa ľahko zamieňajú (napr. veľké O a nula, malé l a jednotka). Stačí z textového poľa odstrániť problematické znaky.
Dôležité upozornenie: Ak abecedu zmenšíte na veľmi malý počet znakov, kolízna odolnosť rapídne klesá. Pri dĺžke 2 a abecede len s 2 znakmi máte len 4 možné ID. To je vhodné len na demonštráciu, nie do produkcie.
Časté chyby a hraničné prípady
Najčastejšia chyba: zmena abecedy na jediný znak. Ako bolo uvedené, nástroj na to reaguje vymazaním výsledkov a zakázaním tlačidla „Kopírovať všetky“. Prečo to nie je povolené? Pretože s jedným znakom by všetky ID boli rovnaké – napríklad ak abeceda obsahuje len „A“, vygenerovalo by sa ID „AAAA...“ (podľa dĺžky). Nástroj by produkoval identické ID, čo by bolo zavádzajúce. Preto je nastavené pravidlo aspoň 2 rôzne znaky.
Druhá častá chyba: príliš krátka dĺžka v kombinácii s malou abecedou. Dĺžka 2 a 3-znaková abeceda dáva len 9 možných ID. Ak generujete 10 ID, kolízia je prakticky istá. Nástroj vás na túto skutočnosť neupozorní, preto je zodpovednosť na vás. Vždy zvážte, koľko ID plánujete vygenerovať a akú dĺžku (a abecedu) na to potrebujete.
Tretia chyba: zabudnutie na URL-bezpečnosť. Predvolená abeceda je URL-bezpečná, ale ak ju zmeníte napríklad na všetky ASCII znaky vrátane medzier, lomítok, bodiek atď., ID môže obsahovať znaky, ktoré v URL vyžadujú percentuálne kódovanie. Tým sa ID predĺži a stratí zmysel. Ak potrebujete ID do URL, vždy nechajte predvolenú abecedu alebo ju upravte len na URL-bezpečné znaky.
Štvrtá chyba: domnienka, že Nano ID je vhodné pre číselné typy. Niektoré databázové systémy (napr. MySQL) nepracujú dobre s reťazcami ako primárnymi kľúčmi. Preto je vhodné zvoliť abecedu len z číslic, prípadne použiť celočíselné ID. Nano ID s číselnou abecedou (10 znakov) a dĺžkou 12 generuje 10^12 = 1 bilión možností, čo je pre väčšinu aplikácií dostačujúce.
FAQ
Môžem použiť Nano ID pre primárne kľúče v databáze? Áno, je to bežná prax. Výhody: kratšie UUID (21 oproti 36), URL-bezpečnosť, možnosť prispôsobiť abecedu (napr. len číslice). Nevýhody: reťazcový typ, ktorý môže byť pomalší pri indexovaní ako celé čísla.
Je Nano ID bezpečné pre tokeny na resetovanie hesla?
Áno, ak je dĺžka aspoň 21 znakov a používa sa URL-bezpečná abeceda. Generovanie pomocou crypto.getRandomValues() je kryptograficky bezpečné. Dôležité: token nesmie byť predvídateľný, a toto je splnené.
Ako sa Nano ID líši od UUID v4? Nano ID je kratšie, prispôsobiteľné a URL-bezpečné. UUID v4 má pevnú dĺžku 36 znakov a neobsahuje URL-bezpečné znaky vždy. Nano ID s predvoleným nastavením má viac možných kombinácií (64^21 ≈ 1,5×10^38) ako UUID v4 (2^122 ≈ 5,3×10^36).
Prečo je predvolená dĺžka 21 znakov? Autor Nano ID, Andrey Sitnik, zvolil 21 znakov pretože to je minimálna dĺžka, ktorá pri URL-bezpečnej abecede (64 znakov) poskytuje odolnosť voči kolíziám porovnateľnú s UUID. Zároveň je dostatočne krátka na to, aby bola praktická v URL a databázach.
Môžem generovať len číslice?
Áno, stačí do textového poľa abecedy zadať 0123456789 (prípadne bez nuly). Pri číselnej abecede odporúčame dĺžku aspoň 12–15 znakov, aby ste predišli kolíziám pri veľkom počte ID.
Je generovanie naozaj len v prehliadači? Áno. Celý JavaScriptový kód beží lokálne vo vašom prehliadači. Nič sa neposiela na server BroBroGo. Môžete si to overiť vypnutím internetového pripojenia – nástroj bude fungovať naďalej.