Utilia

ULID i Nano ID generator

Generiši ULID-ove (s monotonom opcijom) ili Nano ID-ove s vlastitim alfabetom i dužinom, u većem broju, dekodiraj vrijeme iz ULID-a i provjeri rizik kolizije.

Vrsta ID-a

Dekodiraj ULID

Kako generisati ULID ili Nano ID

  1. U polju Vrsta ID-a odaberi ULID (sortabilan) ili Nano ID (kratak).
  2. Postavi Koliko (1 do 1 000). Deset ID-ova se generiše čim se stranica učita.
  3. Za ULID-ove ostavi označeno Monotono (strogo rastuće) da se ID-ovi napravljeni u istoj milisekundi i dalje sortiraju po redu, a označi Mala slova ako to preferira tvoj sistem.
  4. Za Nano ID-ove odaberi Alfabet (ili Vlastiti… pa upiši vlastite znakove) i Dužina.
  5. Klikni na Generiši, pa Kopiraj listu ili Preuzmi (po jedan ID u redu).

Da pročitaš datum skriven u ULID-u, zalijepi ga u Dekodiraj ULID ili klikni na Dekodiraj prvi ID. Alat prikazuje vremensku oznaku u UTC-u (ISO 8601), u tvom lokalnom vremenu, kao Unix milisekunde te 80-bitni nasumični dio u heksadecimalnom zapisu.

Šta je ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) je 128-bitni identifikator zapisan kao 26 znakova Crockford Base32, na primjer 01ARZ3NDEKTSV4RRFFQ69G5FAV. Prvih 10 znakova kodira 48-bitnu vremensku oznaku u milisekundama (dovoljno do 10889. godine); zadnjih 16 znakova je 80 nasumičnih bita. Crockford Base32 izostavlja I, L, O i U da se izbjegne zabuna, a dekodiranje ne razlikuje velika i mala slova.

Pošto vrijeme dolazi prvo, ULID-ovi se abecedno sortiraju po redoslijedu nastanka. To ih čini dobrim primarnim ključevima: novi redovi se dodaju na kraj B-stabla indeksa umjesto da budu razbacani kao nasumični UUID-ovi, a možeš sortirati po ID-u umjesto po posebnoj koloni s datumom.

Monotoni način. Unutar jedne milisekunde nasumični ULID-ovi bi se sortirali nasumičnim redom. S monotonom opcijom alat prati ULID specifikaciju: kada se više ID-ova napravi u istoj milisekundi, zadržava vremensku oznaku i dodaje 1 na prethodni nasumični dio. Ako sat ode unazad, zadržava zadnju vremensku oznaku, pa niz nikada ne opada.

Imaj na umu da ULID otkriva kada je napravljen. Ne koristi ga tamo gdje je ta informacija osjetljiva.

Šta je Nano ID?

Nano ID je kompaktan nasumični identifikator. Zadano je 21 znak iz 64-znakovnog alfabeta sigurnog za URL (A–Z a–z 0–9 _ -), što daje 126 nasumičnih bita, slično UUID-u v4 (122 bita) u manje znakova. Možeš odabrati heksadecimalni zapis, samo cifre, mala slova i cifre, alfanumerički skup, skup bez sličnih znakova (bez 0/O, 1/l/I, 5/S…) za kodove koje ljudi prepisuju ili vlastiti alfabet od 2 do 256 znakova. Ponovljeni znakovi u vlastitom alfabetu se uklanjaju, jer bi neke znakove učinili vjerovatnijim.

Svaki znak se izvlači pomoću crypto.getRandomValues uz odbacivanje uzoraka (rejection sampling), pa nema modulo pristranosti.

Vjerovatnoća kolizije

Panel Vjerovatnoća kolizije primjenjuje granicu rođendanskog paradoksa. Za alfabet veličine A i dužinu L postoji N = A^L mogućih ID-ova. Nakon k ID-ova šansa za najmanje jedan duplikat je otprilike 1 − e^(−k²/2N), pa se rizik od 1 % dostiže nakon k ≈ √(2N · ln(1/0,99)) ID-ova. Unesi Generisanih ID-ova po satu da vidiš koliko bi to trajalo. Uz zadane postavke i 1 000 ID-ova po satu, rizik od 1 % dostiže se za oko 149 milijardi godina; s 8 heksadecimalnih znakova potrebno je samo oko 9 300 ID-ova.

Sve radi u tvom pregledniku. ID-ovi se ne pohranjuju niti šalju na server.

Česta pitanja

ULID ili UUID?

Oba su 128-bitna. ULID je kraći za pisanje (26 znakova umjesto 36) i sortira se po vremenu. UUID verzije 7 sada nudi isti vremenski redoslijed u standardnom UUID formatu, koji baze podataka često pohranjuju izvorno. Odaberi UUID v7 ako ga tvoj stek podržava, a ULID ako želiš kompaktan, čitljiv string.

Jesu li ULID-ovi i Nano ID-ovi dovoljno sigurni za tokene?

Nano ID-ovi sa zadanim alfabetom i dužinom imaju 126 nasumičnih bita iz kriptografskog generatora, što je dovoljno za linkove koji se ne mogu pogoditi. ULID-ovi imaju samo 80 nasumičnih bita, a u monotonom načinu uzastopni ID-ovi se razlikuju za jedan, pa ULID-ove ne koristi kao tajne.

Mogu li skratiti Nano ID?

Možeš, ali rizik od kolizije raste veoma brzo. Provjeri vrijednost ID-ova za 1 % šanse za duplikat za svoju dužinu i alfabet prije nego što se osloniš na kratak ID.

Zašto dekoder odbija moj ULID?

ULID mora imati tačno 26 znakova, koristiti samo znakove Crockford Base32 i počinjati znakom od 0 do 7 (veći prvi znak premašio bi 128 bita).

Pohranjuju li se ili šalju ID-ovi negdje?

Ne. Generišu se u tvom pregledniku i nestaju kada napustiš stranicu.