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 символів Base32 Крокфорда, наприклад 01ARZ3NDEKTSV4RRFFQ69G5FAV. Перші 10 символів кодують 48-бітну мітку часу в мілісекундах (вистачить до 10889 року); останні 16 символів – це 80 випадкових біт. 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 шістнадцятковими символами для цього вистачить лише близько 9 300 ідентифікаторів.

Поширені запитання

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 символів, використовувати лише символи Base32 Крокфорда й починатися з 0–7 (більший перший символ перевищив би 128 біт).

Чи зберігаються ідентифікатори або надсилаються кудись?

Ні. Їх генерують у вашому браузері, і вони зникають, коли ви залишаєте сторінку.