UUID v1
60-bit timestamp + 14-bit clock seq + 48-bit node
Timestamp в 100-наносекундных интервалах от 1582-10-15.
IT
Генерируйте UUID v1 (timestamp), v4 (случайные), v5 (детерминированные SHA-1 с namespace) и v7 (timestamp prefix). До 1000 идентификаторов за раз с выбором namespace и формата.
Об инструменте
Генератор UUID для всех актуальных версий: v1 (timestamp+node), v4 (случайные), v5 (детерминированные SHA-1 namespace) и v7 (sortable timestamp prefixed). До 1000 идентификаторов за раз, namespace presets (DNS/URL/OID/X500) и 6 форматов вывода включая base64 и urn:uuid:.
4 версии UUID: v1, v4, v5, v7 + Nil UUID.
Пакетная генерация - до 1000 за раз.
Namespace presets для v5: DNS, URL, OID, X.500 - или свой UUID.
Формат: стандарт, HEX, без дефисов, в скобках, urn:uuid:, base64.
Криптографически стойкая случайность через Web Crypto.
v7 - сохраняет временной порядок и подходит для индексируемых ключей БД.
v5 - детерминированный по (namespace, name), всегда даёт один и тот же UUID.
Шаг за шагом
Методика
60-bit timestamp + 14-bit clock seq + 48-bit node
Timestamp в 100-наносекундных интервалах от 1582-10-15.
122 случайных бита + версия 4 + variant
Полностью случайный - наиболее популярная версия.
SHA-1(namespace ∥ name)[:16]
Детерминированный: одинаковые входы дают одинаковый UUID.
48-bit Unix ms timestamp + 74 случайных бита
Сохраняет временной порядок, что может уменьшить фрагментацию индекса по сравнению со случайными UUID.
Ограничения
UUID v1 раскрывает время и (псевдо-)MAC - может быть нежелательно с точки зрения приватности.
UUID v7 стандартизован в RFC 9562. Перед использованием проверьте поддержку в выбранной СУБД и библиотеке.
v5 не использует MD5 (это v3) - мы реализуем только v5 как более современный вариант.
Размер: 16 байт (128 бит), текстовая запись - 36 символов.
Вопросы
Для случайных ID - v4. Для PK в БД с сортировкой по времени - v7. Для детерминированных идентификаторов на основе имени - v5. v1 редко нужен сегодня.
Это базовый UUID, относительно которого считается имя. DNS - для доменов, URL - для URL-ов, OID - для ASN.1 идентификаторов.
Это и есть его смысл - например, генерировать одинаковый ID для одного и того же email на разных системах.
Да, до 1000 за раз. Для v5 к имени добавляется /1, /2... чтобы получать разные ID.
v7 содержит timestamp в начале, поэтому записи близкие по времени имеют близкие ID - лучше для индекса и кэша страниц.
Специальный UUID из всех нулей. Используется как пустое/неопределённое значение.
Ещё