Utilia

Generátor ULID a Nano ID

Generuj ULID (s monotónnou voľbou) alebo Nano ID s vlastnou abecedou a dĺžkou, hromadne, dekóduj časovú pečiatku ULID a skontroluj riziko kolízie.

Typ ID

Dekódovať ULID

Ako generovať ULID alebo Nano ID

  1. V časti Typ ID vyber ULID (zoraditeľné) alebo Nano ID (krátke).
  2. Nastav Počet (1 až 1 000). Desať ID sa vygeneruje hneď po načítaní stránky.
  3. Pri ULID nechaj zaškrtnuté Monotónne (prísne rastúce), aby sa ID vytvorené v tej istej milisekunde zoradili podľa poradia, a zaškrtni Malé písmená, ak ich preferuje tvoj systém.
  4. Pri Nano ID vyber Abecedu (alebo Vlastná… a napíš vlastné znaky) a Dĺžku.
  5. Klikni na Generovať a potom zoznam Kopírovať alebo Stiahnuť .txt (jedno ID na riadok).

Dátum ukrytý v ULID zistíš tak, že ho vložíš do časti Dekódovať ULID alebo klikneš na Dekódovať prvé ID. Nástroj ukáže časovú pečiatku v UTC (ISO 8601), v tvojom miestnom čase, ako milisekundy Unix a 80-bitovú náhodnú časť v hex.

Funguje v tvojom prehliadači. Nič, čo zadáš, sa neodosiela na server.

Čo je ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) je 128-bitový identifikátor zapísaný ako 26 znakov Crockford Base32, napríklad 01ARZ3NDEKTSV4RRFFQ69G5FAV. Prvých 10 znakov kóduje 48-bitovú časovú pečiatku v milisekundách (stačí do roku 10889); posledných 16 znakov je 80 náhodných bitov. Crockford Base32 vynecháva I, L, O a U, aby sa predišlo zámene, a dekódovanie nerozlišuje veľkosť písmen.

Keďže čas je na začiatku, ULID sa abecedne zoraďujú v poradí vzniku. Vďaka tomu sú dobrými primárnymi kľúčmi: nové riadky sa pridávajú na koniec indexu B-strom namiesto rozptýlenia ako pri náhodných UUID a môžeš zoraďovať podľa ID namiesto samostatného stĺpca s dátumom.

Monotónny režim. V rámci jednej milisekundy by sa náhodné ULID zoradili v náhodnom poradí. S monotónnou voľbou nástroj sleduje špecifikáciu ULID: keď sa v tej istej milisekunde vytvorí viac ID, zachová časovú pečiatku a k predchádzajúcej náhodnej časti pripočíta 1. Ak hodiny idú dozadu, zachová poslednú časovú pečiatku, takže postupnosť nikdy neklesá.

Pamätaj, že ULID prezrádza, kedy vznikol. Nepoužívaj ho tam, kde je táto informácia citlivá.

Čo je Nano ID?

Nano ID je kompaktný náhodný identifikátor. Predvolených je 21 znakov zo 64-znakovej abecedy bezpečnej pre URL (A–Z a–z 0–9 _ -), čo dáva 126 náhodných bitov, podobne ako UUID v4 (122 bitov), ale s menším počtom znakov. Môžeš vybrať hexadecimálnu abecedu, iba číslice, malé písmená a číslice, alfanumerickú, súbor bez zameniteľných znakov (bez 0/O, 1/l/I, 5/S…) pre kódy, ktoré ľudia prepisujú, alebo vlastnú abecedu s 2 až 256 znakmi. Duplicitné znaky vo vlastnej abecede sa odstránia, pretože by niektoré znaky zvýhodnili.

Každý znak sa ťahá cez crypto.getRandomValues s využitím zamietacieho vzorkovania, takže nevzniká žiadne modulo skreslenie.

Pravdepodobnosť kolízie

Panel Pravdepodobnosť kolízie používa hranicu narodeninového paradoxu. Pri abecede veľkosti A a dĺžke L existuje N = A^L možných ID. Po k ID je šanca aspoň jedného duplikátu približne 1 − e^(−k²/2N), takže 1 % riziko sa dosiahne po k ≈ √(2N · ln(1/0,99)) ID. Zadaj Vygenerované ID za hodinu a uvidíš, ako dlho by to trvalo. S predvolenými nastaveniami a 1 000 ID za hodinu trvá 1 % riziko asi 149 miliárd rokov; pri 8 hexadecimálnych znakoch len asi 9 300 ID.

Často kladené otázky

ULID alebo UUID?

Oba majú 128 bitov. ULID sa píše kratšie (26 znakov namiesto 36) a zoraďuje sa podľa času. UUID verzie 7 dnes ponúka rovnaké časové zoradenie v štandardnom formáte UUID, ktorý databázy často ukladajú natívne. Ak to tvoj stack podporuje, vyber UUID v7; ULID, ak chceš kompaktný, čitateľný reťazec.

Sú ULID a Nano ID dosť bezpečné pre tokeny?

Nano ID s predvolenou abecedou a dĺžkou má 126 náhodných bitov z kryptografického generátora, čo stačí na neuhádnuteľné odkazy. ULID má len 80 náhodných bitov a v monotónnom režime sa po sebe idúce ID líšia o jedna, takže ULID nepoužívaj ako tajomstvá.

Môžem Nano ID skrátiť?

Áno, ale riziko kolízie rastie veľmi rýchlo. Pred spoliehaním sa na krátke ID skontroluj hodnotu Počet ID pre 1 % šancu duplikátu pre svoju dĺžku a abecedu.

Prečo dekodér môj ULID odmieta?

ULID musí mať presne 26 znakov, používať len znaky Crockford Base32 a začínať číslicou 0 až 7 (väčší prvý znak by prekročil 128 bitov).

Ukladajú sa ID niekam alebo sa odosielajú?

Nie. Generujú sa v tvojom prehliadači a po opustení stránky zmiznú.