Перейти до вмісту

Безкоштовний генератор UUID - Створення V1 та V4 UUID миттєво

Миттєво генеруйте унікальні ідентифікатори за допомогою нашого безкоштовного генератора UUID. Створюйте версії 1 (на основі часу) та версії 4 (випадкові) UUID для баз даних, API та розподілених систем.

Генератор UUID

Версія UUID
Згенерований UUID
Калькулятор завантаження...
📚

Документація

Генератор UUID

Генератор UUID — це інструмент, який створює універсально унікальний ідентифікатор, або UUID: код із 128 бітів, що використовується для позначення фрагмента даних, щоб жоден інший об’єкт у світі, найімовірніше, не мав такого самого позначення. Ця сторінка генерує UUID версії 1 (на основі часу) і версії 4 (випадкові).

Що таке UUID?

UUID — це 128-бітове число, записане як 32 шістнадцяткових цифри (символи 0–9 і a–f). Воно поділене на п’ять груп, розділених дефісами, за шаблоном 8-4-4-4-12, загалом у 36 символів. Приклад UUID має такий вигляд:

1550e8400-e29b-41d4-a716-446655440000
2

UUID визначені документом RFC 9562, опублікованим Internet Engineering Task Force у травні 2024, який замінив старіший RFC 4122 від 2005 року. Обидва документи описують однаковий формат на 128 бітів. Програмне забезпечення використовує UUID для ідентифікації рядків баз даних, файлів, сеансів користувачів та інших записів без центрального органу, який розподіляє номери. Оскільки простір можливих UUID дуже великий, два комп’ютери можуть незалежно згенерувати UUID одночасно й майже ніколи не отримати однаковий.

Формат і структура UUID

128 бітів UUID поділено на іменовані поля. Кожне поле займає фіксовану кількість бітів:

  • time_low — 32 біти
  • time_mid — 16 бітів
  • time_hi_and_version — 16 бітів
  • clock_seq_hi_and_reserved — 8 бітів
  • clock_seq_low — 8 бітів
  • node — 48 бітів
Структура полів UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Чотири біти всередині time_hi_and_version містять номер версії UUID, а два біти всередині clock_seq_hi_and_reserved містять варіант, який повідомляє програмному забезпеченню, як читати решту полів. Визначено вісім версій.

Наведені вище назви полів походять із версії 1, де вони справді містять значення часу та вузла. Інші версії зберігають той самий формат 8-4-4-4-12 і ті самі межі полів, але заповнюють більшість бітів випадковими даними. У UUID версії 4 група з позначкою time_low містить випадкове значення, а не час.

Як згенерувати UUID за допомогою цього інструмента

  1. Виберіть версію: версія 1 (на основі часу) або версія 4 (випадкова).
  2. Прочитайте UUID у вікні результату. Новий UUID з’являється одразу після завантаження сторінки або зміни версії.
  3. Виберіть «Generate», щоб створити інший UUID.
  4. Виберіть «Copy», щоб скопіювати результат у буфер обміну, а потім вставити його в код, базу даних або файл конфігурації.

Панель під результатом розділяє UUID на п’ять полів і називає кожне з них, тому цифри версії та варіанта легко знайти.

Версія 4 підходить для більшості завдань, зокрема для ключів баз даних і токенів сеансів, оскільки не містить інформації про час або місце створення. Версія 1 підходить для записів, час створення яких потрібно відновити з самого ідентифікатора, наприклад записів журналу.

UUID версії 1 проти версії 4

Версія 1 кодує поточну часову мітку, а також випадково вибрані послідовність годинника та значення вузла. Стандарт допускає, щоб значенням вузла була справжня мережева адреса комп’ютера (MAC), але також дозволяє використовувати випадково згенероване значення вузла як альтернативу, що захищає приватність. Цей інструмент завжди використовує випадковий варіант: його UUID версії 1 ніколи не зчитують і не розкривають справжню MAC-адресу. Стандарт також вимагає встановлювати молодший біт першого байта поля вузла в 1 для випадкового значення вузла, і цей інструмент його встановлює. Справжні мережеві карти ніколи не мають такого встановленого біта, тому випадковий вузол не можна сплутати зі справжнім. Тому друга шістнадцяткова цифра п’ятої групи в UUID версії 1 з цієї сторінки завжди непарна: 1, 3, 5, 7, 9, b, d або f.

Часову мітку всередині UUID версії 1 можна зчитати, тому записи можна впорядкувати за часом створення. Сортування самого тексту UUID цього не забезпечує, оскільки перша група містить молодші 32 біти часової мітки, які переповнюються приблизно кожні 7 хвилин. Версія 6, додана в RFC 9562, зберігає ту саму часову мітку зі старшими бітами на початку, завдяки чому працює звичайне текстове сортування.

Версія 4 складається з випадкових бітів, де кілька бітів зафіксовано для позначення версії та варіанта. Вона не містить часової мітки й даних, пов’язаних із конкретним комп’ютером, тому не розкриває, коли або де її створено. Впорядкувати її за часом створення неможливо.

Стандарт передбачає ще шість версій, але цей інструмент їх не генерує: версія 2 (DCE Security, використовується рідко); версії 3 і 5, створені хешуванням простору імен та імені за допомогою MD5 або SHA-1, тому однакові вхідні дані завжди дають однаковий UUID; а також версії 6, 7 і 8, додані RFC 9562 у (24 300 см) 2024 році для ідентифікаторів, придатних до сортування, і користувацьких ідентифікаторів.

Як обчислити UUID (формула)

Версія 4:

  1. Згенеруйте 128 випадкових бітів.
  2. Встановіть чотири біти версії, першу шістнадцяткову цифру третьої групи, у значення 0100 (шістнадцяткове 4).
  3. Встановіть два старші біти четвертої групи в 10 (тому першою шістнадцятковою цифрою цієї групи буде 8, 9, a або b).

Випадковими є лише 122 із 128 бітів, оскільки 6 бітів зафіксовано кроками 2 і 3. Це дає 2^122, або приблизно 5,3 × 10^36, можливих UUID версії 4.

Версія 1:

  1. Візьміть поточний час як кількість інтервалів по 100 наносекунд від 15 жовтня 1582 р. — дати реформи григоріанського календаря. На практиці це звичайний час Unix у мілісекундах плюс 12 219 292 800 000, усе помножене на 10 000.
  2. Розділіть цей лічильник на 60 бітів між трьома полями: молодші 32 бітів помістіть у time_low, наступні 16 — у time_mid, а старші 12 — у time_hi_and_version.
  3. Згенеруйте послідовність годинника довжиною 14 бітів, щоб уникнути збігів, якщо системний годинник переведено назад.
  4. Згенеруйте значення вузла довжиною 48 бітів, установивши молодший біт його першого байта в 1.
  5. Встановіть біти версії в 0001, а біти варіанта — в 10.

У всіх версіях UUID повний простір на 128 бітів містить 2^128, або приблизно 3,4 × 10^38, можливих значень. Це число настільки велике, що випадкові збіги на практиці не становлять проблеми.

Приклад обчислення

Читання UUID версії 4. Візьмімо наведений раніше приклад: 550e8400-e29b-41d4-a716-446655440000.

  • Третя група, 41d4: перша цифра — 4, що позначає UUID версії 4.
  • Четверта група, a716: перша цифра, a (у двійковій системі 1010), починається з 10 — обов’язкових бітів варіанта.
  • Решта шістнадцяткових цифр — випадкові дані.

Програма, яка читає цей UUID, перевіряє шаблон 4 і 10, щоб підтвердити формат, а потім розглядає решту як непрозоре випадкове значення.

Побудова UUID версії 1. Припустімо, годинник показує 1 700 000 000 000 мілісекунд часу Unix, тобто 14 листопада 2023 р., 22:13:20 UTC.

  1. Додайте зміщення: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 мс.
  2. Помножте на 10 000, щоб отримати інтервали по 100 наносекунд: 139,192,928,000,000,000. У шістнадцятковій системі це 01EE833B04AFC000.
  3. Розділіть його: time_low = 04AFC000 (молодші 8 шістнадцяткових цифр), time_mid = 833B (наступні 4), а старші 12 бітів — 1EE.
  4. Додайте цифру версії 1 перед 1EE, отримавши time_hi_and_version = 11EE.

Тоді UUID має вигляд 04afc000-833b-11ee-, після чого записуються послідовність годинника та значення вузла. Програмне забезпечення може виконати ці чотири кроки у зворотному порядку, щоб відновити дату 14 листопада 2023 р. з ідентифікатора.

Поширені способи використання UUID

  • Первинні ключі в базах даних, особливо коли кілька серверів одночасно створюють записи, не узгоджуючи дії між собою.
  • Токени сеансів і ключі API, зазвичай версії 4, завдяки захисту приватності.
  • Ідентифікатори файлів, подій і ресурсів у розподілених системах, наприклад у мікросервісах.
  • Ідентифікатори пристроїв у великих мережах IoT, де кожен пристрій може створювати власний ідентифікатор автономно.

Основний компроміс — розмір: UUID займає 16 байтів сховища, тоді як простий цілочисельний лічильник займає 4 або 8 байтів, а деякі бази даних індексують UUID повільніше, ніж послідовні цілі числа.

Альтернативи UUID

Цілі числа з автоматичним збільшенням менші й простіші, але погано підходять, коли кільком серверам потрібно незалежно розподіляти ідентифікатори. Ідентифікатори Snowflake, розроблені у Twitter, поєднують часову мітку з ідентифікатором виконавця, створюючи компактні ідентифікатори, придатні до сортування, у розподіленій системі. ULID (універсальні унікальні лексикографічно сортовані ідентифікатори) — новіший формат, розроблений так, щоб бути одночасно випадковим і придатним до сортування за часом створення, на відміну від стандартного UUID версії 4.

Історія стандарту UUID

Концепція UUID виникла в 1980-х роках у Apollo Computer як частина її Network Computing System. Пізніше Open Software Foundation прийняла цей формат для Distributed Computing Environment. Internet Engineering Task Force опублікувала RFC 4122 у (10 500 см) 2005 році, а в травні 2024 року замінила його RFC 9562. RFC 9562 зберігає незмінну працездатність усіх попередніх версій і додає версії 6, 7 та 8.

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

Для чого використовують генератор UUID? Він створює унікальні ідентифікатори для баз даних, розподілених систем, токенів сеансів, ключів API та ідентифікаторів пристроїв, щоб жодні два записи не мали одного й того самого ідентифікатора.

Яка різниця між UUID v1 і v4? Версія 1 кодує часову мітку, яку програмне забезпечення може зчитати, щоб відновити час створення. Версія 4 повністю випадкова й не містить часової мітки. Результат версії 1 цього інструмента використовує випадково згенероване значення вузла замість справжньої MAC-адреси, тому також не розкриває інформацію для ідентифікації комп’ютера.

Чи розкриває версія 1 мою MAC-адресу? Ні, якщо використовувати цей інструмент. Стандарт дозволяє, щоб поле вузла UUID версії 1 містило справжню MAC-адресу, але цей генератор завжди заповнює це поле випадковими бітами й установлює біт, який позначає значення як таке, що не є справжньою мережевою адресою.

Чи гарантовано UUID є унікальними? Жодна схема ідентифікаторів не може гарантувати абсолютну унікальність, але простір на 128 бітів містить приблизно 3,4 × 10^38 можливих значень, а UUID версії 4 має приблизно 5,3 × 10^36 можливих випадкових значень. Імовірність дублювання досить мала, щоб нею можна було знехтувати майже в будь-якому практичному застосуванні.

Чи можна використовувати UUID як первинний ключ бази даних? Так. UUID добре підходять як первинні ключі в розподілених системах, оскільки будь-який вузол може створити такий ключ без звернення до центрального сервера. Недоліком є 16 байтів пам’яті на ключ — більше, ніж для типового цілого числа, — і потенційно повільніша робота індексу в дуже великих таблицях.

Чи UUID — це те саме, що GUID? Так. GUID (глобально унікальний ідентифікатор) — це назва Microsoft для тієї самої концепції, визначеної RFC 4122 як UUID.

Чи можна сортувати UUID версії 4 за часом створення? Ні. UUID версії 4 є випадковими, тому не містять відомостей про час створення. UUID версії 1 містить такі відомості, але спочатку їх потрібно декодувати; сортування тексту не дає порядку створення. Версія 6, версія 7 і ULID розроблені так, щоб безпосередньо сортуватися як текст.

Джерела

  1. Davis, K., Peabody, B. і Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. і Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Universally unique identifier. У Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. У Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Специфікація ULID. GitHub. https://github.com/ulid/spec