Генератор ULID

Генератор ULID Randogram позволяет сгенерировать сортируемый по времени уникальный идентификатор.
ULID занимает 128 бит, как и UUID, но записывается 26 символами без дефисов: первые 48 бит — время Unix в миллисекундах, остальные 80 — случайные. Алфавит Crockford Base32 подобран так, чтобы порядок символов совпадал с порядком их значений, поэтому идентификаторы сортируются по времени создания как обычные строки. Внутри одной генерации случайная часть наращивается от предыдущего значения, и порядок сохраняется даже у идентификаторов, созданных в одну миллисекунду.
Вы можете также воспользоваться публичным API генератора ULID

Вопросы и ответы

Чем ULID отличается от UUID?
Длиной записи и алфавитом: ULID занимает 26 символов вместо 36 и обходится без дефисов, поэтому его можно вставлять в адрес страницы или имя файла как есть. Данных в обоих ровно 128 бит. По устройству ULID ближе всего к UUID версии 7: первые 48 бит — время Unix в миллисекундах, остальные 80 — случайные.
Почему ULID сортируется по времени создания?
Потому что метка времени стоит в начале и записана алфавитом, где порядок символов совпадает с порядком их значений. Из-за этого идентификаторы, отсортированные как обычные строки, оказываются отсортированными и по времени. Для первичного ключа это значит, что новые записи ложатся в один край индекса, а не разбрасываются по нему, как значения UUID версии 4.
Сохраняется ли порядок у идентификаторов из одной миллисекунды?
Да, в пределах одной генерации. Метка времени у них совпадает, поэтому случайная часть не берется заново, а наращивается от предыдущего значения — идентификаторы выдаются по возрастанию. Между разными запросами и тем более между разными серверами такой порядок не гарантируется: там значения расходятся только меткой времени.
Почему в ULID нет букв I, L, O и U?
Идентификаторы записываются алфавитом Crockford Base32, из которого убраны символы, похожие на цифры: I и L путаются с единицей, O — с нулем. Буква U исключена отдельно, чтобы в идентификаторе случайно не сложилось бранное слово. Остаются 10 цифр и 22 буквы — по 5 бит на символ, поэтому 130 бит записи хватает на 128 бит данных.