Генератор UUID для уникальных идентификаторов и приложений
Генерируйте универсально уникальные идентификаторы (UUID) для различных приложений. Создавайте как UUID версии 1 (основанные на времени), так и UUID версии 4 (случайные) для использования в распределенных системах, базах данных и многом другом.
Генератор UUID
Сгенерированный UUID
Документация
Генератор UUID
Введение
Универсальный уникальный идентификатор (UUID) — это 128-битное число, используемое для идентификации информации в компьютерных системах. UUID стандартизированы Открытым программным обеспечением (OSF) в рамках среды распределенных вычислений (DCE). Эти идентификаторы разработаны так, чтобы быть уникальными как в пространстве, так и во времени, что делает их идеальными для различных приложений в распределенных системах и за их пределами.
Этот инструмент генерации UUID позволяет создавать как версии 1 (основанные на времени), так и версии 4 (случайные) UUID. Эти идентификаторы полезны в различных сценариях, где требуется уникальная идентификация, таких как ключи баз данных, распределенные системы и сетевые протоколы.
Как работают UUID
Структура UUID
UUID обычно представляется в виде 32 шестнадцатеричных цифр, отображаемых в пяти группах, разделенных дефисами, в формате 8-4-4-4-12, всего 36 символов (32 алфавитно-цифровых символа и 4 дефиса). Например:
1550e8400-e29b-41d4-a716-446655440000
2
128 бит UUID разделены на определенные поля, каждое из которых несет различную информацию в зависимости от версии UUID:
- 32 бита для поля time_low
- 16 бит для поля time_mid
- 16 бит для поля time_hi_and_version
- 8 бит для поля clock_seq_hi_and_reserved
- 8 бит для поля clock_seq_low
- 48 бит для поля node
Вот диаграмма, иллюстрирующая структуру UUID:
Версии UUID
Существует несколько версий UUID, каждая из которых имеет свой метод генерации:
- Версия 1 (основанная на времени): Использует текущее время и MAC-адрес компьютера.
- Версия 2 (безопасность DCE): Похожа на версию 1, но включает локальный идентификатор домена.
- Версия 3 (основанная на имени, MD5): Генерируется путем хеширования идентификатора пространства имен и имени.
- Версия 4 (случайная): Генерируется с использованием случайного или псевдослучайного числа.
- Версия 5 (основанная на имени, SHA-1): Похожа на версию 3, но использует хеширование SHA-1.
Этот инструмент сосредоточен на генерации UUID версии 1 и версии 4.
Формула
Генерация UUID версии 1
UUID версии 1 генерируются с использованием следующих компонентов:
- Временная метка: 60-битное значение, представляющее количество 100-наносекундных интервалов с 15 октября 1582 года (дата реформы Григорианского календаря).
- Последовательность часов: 14-битное значение, используемое для предотвращения дубликатов в случае, если часы установлены назад.
- Узел: 48-битное значение, обычно получаемое из MAC-адреса компьютера.
Формула для генерации UUID версии 1 может быть выражена как:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
Генерация UUID версии 4
UUID версии 4 генерируются с использованием криптографически стойкого генератора случайных чисел. Формула проста:
1UUID = random_128_bit_number
2
С определенными битами, установленными для указания версии (4) и варианта.
Сценарии использования
UUID имеют множество приложений в различных областях компьютерных наук и программной инженерии:
-
Ключи баз данных: UUID часто используются в качестве первичных ключей в базах данных, особенно в распределенных системах, где несколько узлов могут одновременно генерировать записи.
-
Распределенные системы: В крупных распределенных системах UUID помогают уникально идентифицировать ресурсы, транзакции или события на нескольких узлах или в дата-центрах.
-
Адресация содержимого: UUID могут использоваться для создания уникальных идентификаторов для содержимого в системах хранения с адресацией по содержимому.
-
Управление сессиями: Веб-приложения часто используют UUID для управления пользовательскими сессиями, обеспечивая уникальный идентификатор для каждой сессии.
-
Идентификация устройств IoT: В приложениях Интернета вещей (IoT) UUID могут использоваться для уникальной идентификации отдельных устройств в сети.
Альтернативы
Хотя UUID широко используются, существуют альтернативные подходы к генерации уникальных идентификаторов:
-
Автоинкрементные идентификаторы: Простые и часто используемые в системах с одной базой данных, но не подходят для распределенных сред.
-
Идентификаторы, основанные на времени: Могут быть полезны для временно упорядоченных данных, но могут столкнуться с проблемами коллизий в сценариях с высокой конкурентностью.
-
Идентификаторы Snowflake: Разработаны Twitter, эти идентификаторы комбинируют временную метку и номер рабочего узла для генерации уникальных идентификаторов в распределенных системах.
-
ULID (Универсально уникальный лексикографически сортируемый идентификатор): Более недавняя альтернатива, которая стремится быть более удобной для человека и сортируемой, чем UUID.
История
Концепция UUID была впервые представлена в системе сетевых вычислений Apollo и позже стандартизирована Открытым программным обеспечением (OSF) в рамках среды распределенных вычислений (DCE) в 1990-х годах. Первоначальная спецификация была опубликована в 1997 году как ISO/IEC 11578:1996 и позже пересмотрена в 2005 году как часть ISO/IEC 9834-8:2005.
Ключевые вехи в истории UUID:
- 1980-е: Apollo Computer разрабатывает концепцию UUID для своей системы сетевых вычислений.
- 1997: Первая спецификация UUID опубликована как ISO/IEC 11578:1996.
- 2005: Спецификация UUID пересмотрена и опубликована как часть ISO/IEC 9834-8:2005.
- 2009: RFC 4122 определяет формат UUID и алгоритмы генерации, используемые сегодня.
Со временем UUID стали важным инструментом в распределенных системах и проектировании баз данных, с различными реализациями и адаптациями в разных языках программирования и платформах.
Примеры кода
Вот примеры генерации UUID на различных языках программирования:
1import uuid
2
3## Генерация UUID версии 4 (случайный)
4random_uuid = uuid.uuid4()
5print(f"UUID версии 4: {random_uuid}")
6
7## Генерация UUID версии 1 (основанный на времени)
8time_based_uuid = uuid.uuid1()
9print(f"UUID версии 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Генерация UUID версии 4 (случайный)
4const randomUuid = uuidv4();
5console.log(`UUID версии 4: ${randomUuid}`);
6
7// Генерация UUID версии 1 (основанный на времени)
8const timeBasedUuid = uuidv1();
9console.log(`UUID версии 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Генерация UUID версии 4 (случайный)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID версии 4: " + randomUuid);
8
9 // Генерация UUID версии 1 (основанный на времени)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID версии 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Генерация UUID версии 4 (случайный)
4random_uuid = SecureRandom.uuid
5puts "UUID версии 4: #{random_uuid}"
6
7## В Ruby нет встроенного метода для UUID версии 1
8## Вам нужно будет использовать гем, такой как 'uuidtools', для этого
9
1<?php
2// Генерация UUID версии 4 (случайный)
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "UUID версии 4: " . $randomUuid . "\n";
11
12// В PHP нет встроенного метода для UUID версии 1
13// Вам нужно будет использовать библиотеку, такую как 'ramsey/uuid', для этого
14?>
15
Ссылки
- Leach, P., Mealling, M., & Salz, R. (2005). Пространственный уникальный идентификатор (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Международная организация по стандартизации. (2005). Информационные технологии – Процедуры для работы с органами регистрации OSI: Генерация и регистрация универсально уникальных идентификаторов (UUID) и их использование в качестве компонентов идентификаторов объектов ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Универсальный уникальный идентификатор. (2023). В Википедии. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Идентификатор Snowflake. (2023). В Википедии. https://en.wikipedia.org/wiki/Snowflake_ID
- Спецификация ULID. (н.д.). GitHub. https://github.com/ulid/spec
Обратная связь
Нажмите на уведомление об обратной связи, чтобы начать оставлять отзыв об этом инструменте
Связанные инструменты
Откройте для себя больше инструментов, которые могут быть полезны для вашего рабочего процесса