Utilia

Generátor ULID a Nano ID

Generuj ULID (s monotónní volbou) nebo Nano ID s vlastní abecedou a délkou hromadně, dekóduj časovou značku ULID a zkontroluj riziko kolize.

Typ ID

Dekódovat ULID

Jak generovat ULID nebo Nano ID

  1. V poli Typ ID vyber ULID (řaditelné) nebo Nano ID (krátké).
  2. Nastav Počet (1 až 1 000). Deset ID se vygeneruje hned po načtení stránky.
  3. U ULID nech zaškrtnuté Monotónní (striktně rostoucí), aby se ID vytvořená ve stejné milisekundě řadila správně, a zaškrtni Malá písmena, pokud je tvůj systém upřednostňuje.
  4. U Nano ID vyber Abecedu (nebo Vlastní… a napiš vlastní znaky) a Délku.
  5. Klikni na Generovat, pak seznam Kopírovat nebo Stáhnout jako soubor .txt (jedno ID na řádek).

Chceš-li přečíst datum ukryté v ULID, vlož ho do části Dekódovat ULID nebo klikni na Dekódovat první ID. Nástroj ukáže časovou značku v UTC (ISO 8601), v místním čase, jako milisekundy Unix a 80bitovou náhodnou část v šestnáctkové soustavě.

Co je ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) je 128bitový identifikátor zapsaný jako 26 znaků Crockford Base32, například 01ARZ3NDEKTSV4RRFFQ69G5FAV. Prvních 10 znaků kóduje 48bitovou časovou značku v milisekundách (dostačuje do roku 10889); posledních 16 znaků je 80 náhodných bitů. Crockford Base32 vynechává I, L, O a U, aby nedocházelo k záměnám, a dekódování nerozlišuje velikost písmen.

Protože čas je na začátku, ULID se abecedně řadí podle pořadí vzniku. To z nich dělá dobré primární klíče: nové řádky se přidávají na konec indexu B-strom místo rozptýlení jako u náhodných UUID a můžeš řadit podle ID místo podle samostatného sloupce s datem.

Monotónní režim. V rámci jedné milisekundy by se náhodná ULID řadila v náhodném pořadí. S monotónní volbou nástroj postupuje podle specifikace ULID: když se několik ID vytvoří ve stejné milisekundě, zachová časovou značku a k předchozí náhodné části přičte 1. Pokud hodiny jdou zpět, zachová poslední časovou značku, takže posloupnost nikdy neklesá.

Pamatuj, že ULID prozrazuje, kdy vzniklo. Nepoužívej ho tam, kde je tato informace citlivá.

Co je Nano ID?

Nano ID je kompaktní náhodný identifikátor. Výchozí má 21 znaků z 64znakové abecedy bezpečné pro URL (A–Z a–z 0–9 _ -), což dává 126 náhodných bitů, podobně jako UUID v4 (122 bitů) v menším počtu znaků. Můžeš zvolit šestnáctkovou abecedu, pouze číslice, malá písmena a číslice, alfanumerickou, sadu bez zaměnitelných znaků (bez 0/O, 1/l/I, 5/S…) pro kódy, které lidé přepisují, nebo vlastní abecedu o 2 až 256 znacích. Duplicitní znaky ve vlastní abecedě se odstraní, protože by některé znaky byly pravděpodobnější.

Každý znak se losuje pomocí crypto.getRandomValues s odmítavým vzorkováním, takže nevzniká žádné zkreslení způsobené modulem.

Pravděpodobnost kolize

Panel Pravděpodobnost kolize používá hranici narozeninového paradoxu. Při abecedě o velikosti A a délce L existuje N = A^L možných ID. Po k ID je šance alespoň jednoho duplikátu zhruba 1 − e^(−k²/2N), takže 1% riziko nastane po k ≈ √(2N · ln(1/0,99)) ID. Zadej Vygenerovaných ID za hodinu a uvidíš, jak dlouho by to trvalo. S výchozím nastavením a 1 000 ID za hodinu trvá 1% riziko zhruba 149 miliard let; s 8 šestnáctkovými znaky jen asi 9 300 ID.

Časté dotazy

ULID, nebo UUID?

Obojí má 128 bitů. ULID se zapisuje kratší (26 znaků místo 36) a řadí se podle času. UUID verze 7 nyní nabízí totéž řazení podle času ve standardním formátu UUID, který databáze často ukládají nativně. Vol UUID v7, pokud ho tvůj stack podporuje, a ULID, pokud chceš kompaktní čitelný řetězec.

Jsou ULID a Nano ID dostatečně bezpečné pro tokeny?

Nano ID s výchozí abecedou a délkou mají 126 náhodných bitů z kryptografického generátoru, což stačí pro neuhodnutelné odkazy. ULID mají jen 80 náhodných bitů a v monotónním režimu se po sobě jdoucí ID liší o jedničku, takže ULID jako tajemství nepoužívej.

Mohu Nano ID zkrátit?

Ano, ale riziko kolize roste velmi rychle. Než se na krátké ID spolehneš, zkontroluj hodnotu Počet ID pro 1% šanci duplicity pro svou délku a abecedu.

Proč dekodér moje ULID odmítá?

ULID musí mít přesně 26 znaků, používat jen znaky Crockford Base32 a začínat číslicí 0 až 7 (větší první znak by překročil 128 bitů).

Ukládají se ID nebo odesílají někam?

Ne. Generují se ve tvém prohlížeči a po opuštění stránky zmizí.