Utilia

Генератор на ULID и Nano ID

Генерирайте ULID (с монотонна опция) или Nano ID със собствена азбука и дължина, на едро, декодирайте времето в ULID и проверете риска от колизия.

Вид идентификатор

Декодиране на ULID

Как да генерирате ULID или Nano ID

  1. В Вид идентификатор изберете ULID (сортируем) или Nano ID (кратък).
  2. Задайте Колко (от 1 до 1000). Десет идентификатора се генерират веднага щом страницата се зареди.
  3. За ULID оставете отметнат Монотонен (строго нарастващ), така че идентификаторите, създадени в една и съща милисекунда, пак да се подреждат по ред, и отметнете Малки букви, ако вашата система го предпочита.
  4. За Nano ID изберете Азбука (или Собствена… и въведете свои знаци) и Дължина.
  5. Щракнете върху Генерирай, после Копирай списъка или Изтегли като .txt (по един идентификатор на ред).

За да прочетете датата, скрита в ULID, поставете го в Декодиране на ULID или щракнете върху Декодирай първия идентификатор. Инструментът показва времето в UTC (ISO 8601), по вашето местно време, като Unix милисекунди и 80-битовата случайна част в hex.

Какво е ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) е 128-битов идентификатор, записан като 26 знака в Crockford Base32, например 01ARZ3NDEKTSV4RRFFQ69G5FAV. Първите 10 знака кодират 48-битов времеви печат в милисекунди (достатъчен до 10889 г.); последните 16 знака са 80 случайни бита. Crockford Base32 пропуска I, L, O и U, за да се избегне объркване, а декодирането не различава малки от главни букви.

Тъй като времето е първо, ULID се подреждат по азбучен ред в реда на създаване. Това ги прави добри първични ключове: новите редове се добавят в края на B-дървесния индекс, вместо да са пръснати като случайните UUID, и можете да сортирате по идентификатор вместо по отделна колона с дата.

Монотонен режим. В рамките на една милисекунда случайните ULID биха се подреждали в случаен ред. С монотонната опция инструментът следва спецификацията на ULID: когато няколко идентификатора се създават в една и съща милисекунда, запазва времевия печат и добавя 1 към предишната случайна част. Ако часовникът се върне назад, запазва последния времеви печат, така че редицата никога не намалява.

Имайте предвид, че ULID разкрива кога е създаден. Не използвайте такъв там, където тази информация е чувствителна.

Какво е Nano ID?

Nano ID е компактен случаен идентификатор. По подразбиране е 21 знака от 64-знакова азбука, безопасна за URL (A–Z a–z 0–9 _ -), което дава 126 случайни бита, подобно на UUID v4 (122 бита) с по-малко знаци. Можете да изберете шестнадесетична азбука, само цифри, малки букви и цифри, букви и цифри, набор без сходни знаци (без 0/O, 1/l/I, 5/S…) за кодове, които хората въвеждат, или своя азбука от 2 до 256 знака. Повтарящите се знаци в собствена азбука се премахват, защото биха направили някои знаци по-вероятни.

Всеки знак се тегли с crypto.getRandomValues чрез отхвърлящо семплиране, така че няма отклонение от модулната операция.

Вероятност за колизия

Панелът Вероятност за колизия прилага границата на рождения ден. При азбука с размер A и дължина L има N = A^L възможни идентификатора. След k идентификатора вероятността за поне един дубликат е около 1 − e^(−k²/2N), така че 1% риск се достига след k ≈ √(2N · ln(1/0,99)) идентификатора. Въведете Генерирани идентификатори на час, за да видите колко време би отнело. С настройките по подразбиране и 1000 идентификатора на час 1% риск отнема около 149 милиарда години; с 8 шестнадесетични знака отнема само около 9300 идентификатора.

Често задавани въпроси

ULID или UUID?

И двата са 128 бита. ULID е по-кратък за записване (26 знака вместо 36) и се подрежда по време. UUID версия 7 вече предлага същото подреждане по време в стандартния UUID формат, който базите данни често съхраняват нативно. Изберете UUID v7, ако вашата платформа го поддържа, и ULID, ако искате компактен, четим низ.

Достатъчно сигурни ли са ULID и Nano ID за токени?

Nano ID със стандартната азбука и дължина има 126 случайни бита от криптографски генератор, което е достатъчно за непредсказуеми връзки. ULID имат само 80 случайни бита, а в монотонен режим последователните идентификатори се различават с единица, затова не използвайте ULID като тайни.

Мога ли да скъся Nano ID?

Да, но рискът от колизия расте много бързо. Проверете стойността Идентификатори за 1% шанс за повторение за вашата дължина и азбука, преди да разчитате на кратък идентификатор.

Защо декодерът отхвърля моя ULID?

ULID трябва да има точно 26 знака, да използва само знаци от Crockford Base32 и да започва с 0 до 7 (по-голям първи знак би надвишил 128 бита).

Съхраняват ли се или изпращат ли се идентификаторите някъде?

Не. Те се генерират във вашия браузър и изчезват, когато напуснете страницата.