Генератор и декодер KSUID
Создавайте KSUID — идентификаторы из 27 символов, которые сортируются по времени создания, — с криптографически стойким генератором случайных чисел, или вставьте KSUID, чтобы узнать, когда он создан и какая у него случайная часть. Всё работает в браузере.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Укажите, сколько создать (от 1 до 100). KSUID появляются сразу; кнопка «Создать заново» выдаёт новый набор.
- Скопируйте список — по одному KSUID на строку, уже по порядку.
- Чтобы разобрать ID, вставьте его в поле Разобрать KSUID: появятся время создания в UTC, исходная метка времени и случайная часть.
Как это работает
KSUID — это 20 байтов:
- байты 0–3: секунды от эпохи KSUID (Unix-время 1 400 000 000), старший байт первым;
- байты 4–19: 128 случайных бит.
20 байтов читаются как одно 160-битное число и записываются в системе по основанию 62 цифрами 0-9, A-Z, a-z, дополняясь слева нулями до 27 символов. Самый большой возможный KSUID — aWgEPTl1tmebfsQzFP4bxwgy80V. Разбор идёт теми же шагами в обратном порядке.
Пример
KSUID из документации формата, 0ujtsYcgvSTl8PAuAdqWYSMnLOv, разбирается так:
- метка времени 107608047 → Unix-время 107 608 047 + 1 400 000 000 = 1 507 608 047;
- создан 2017-10-10T04:00:47Z;
- случайная часть B5A1CD34B5F99D1154FB6853345C9735.
Советы
- Храните KSUID как строку в столбце с учётом регистра: a и A — разные цифры.
- Время создания видно любому, у кого есть ID; не используйте KSUID там, где это раскрывает лишнее.
- Если нужен порядок до миллисекунды, подойдёт ULID; для совместимости со стандартами — UUID.
Частые вопросы
Что такое KSUID?
K-Sortable Unique IDentifier — формат, опубликованный компанией Segment. Это 20 байтов: 4-байтовая метка времени в секундах и 16 байтов (128 бит) случайных данных, записанные 27 символами base62 (0-9, A-Z, a-z). Время стоит в начале, поэтому сортировка KSUID как строк сортирует их по времени создания.
Почему метка времени не совпадает с Unix-временем?
KSUID считает секунды от собственной эпохи — 1 400 000 000 в Unix-времени (13 мая 2014 года, 16:53:20 UTC), поэтому 32-битного счётчика хватит до 2150 года. Чтобы получить Unix-время, прибавьте 1 400 000 000: 107 608 047 превращается в 1 507 608 047, то есть 10 октября 2017 года, 04:00:47 UTC.
Чем KSUID отличается от UUID и ULID?
В UUID v4 122 случайных бита и нет порядка по времени. В ULID 48-битное время в миллисекундах и 80 случайных бит в 26 символах. У KSUID точность времени всего секунда, зато случайных бит 128 — больше, чем у обоих, — поэтому совпадения практически исключены даже на множестве серверов.
Достаточно ли случайны создаваемые здесь ID?
Да. Случайная часть берётся из crypto.getRandomValues — криптографически стойкого генератора браузера, и ничего не отправляется на сервер. ID, созданные в одну секунду, различаются только случайной частью, поэтому список уже отсортирован.