Генератор UUID онлайн - создавайте уникальные идентификаторы

Что такое UUID?

UUID (Universally Unique Identifier) — это 128-битный идентификатор, используемый в компьютерных системах для уникальной идентификации информации. UUID стандартизирован согласно RFC 4122 и благодаря своей огромной энтропии гарантирует практически нулевую вероятность коллизии — это означает, что два независимо сгенерированных UUID почти наверняка будут уникальными.

UUID имеет стандартный формат: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, где каждый x — это шестнадцатеричная цифра (0-9, a-f), M обозначает версию UUID, а N обозначает вариант.

Версии UUID

UUID v1 (Временная метка + MAC-адрес)

UUID v1 основан на текущей временной метке (timestamp) и случайном значении (в браузере вместо MAC-адреса). Использует 100-наносекундные интервалы с 15 октября 1582 года (Григорианский календарь).

Использование:

  • Ситуации, когда требуется хронологическая сортировка UUID
  • Отладка и журналирование (UUID содержит информацию о времени создания)
  • Распределенные системы с временной синхронизацией

Пример: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

Преимущества:

  • UUID можно сортировать хронологически по времени создания
  • Полезно для аудита и отладки
  • Содержит информацию о временной метке

Недостатки:

  • Потенциальный риск безопасности – содержит временную метку
  • В браузере не содержит фактического MAC-адреса (заменен случайным значением)
  • Плохая локальность БД (временная метка находится в младших битах)

UUID v3 (MD5 хеш)

UUID v3 генерируется с использованием MD5 хеша UUID пространства имен и имени. Детерминированный — одно и то же пространство имен + имя всегда создадут один и тот же UUID.

Использование:

  • Преобразование URL, DNS-имен или других идентификаторов в UUID
  • Ситуации, когда требуются воспроизводимые UUID
  • Сопоставление между различными системами идентификации

Пример: a3bb189e-8bf9-3888-9912-ace4e6543002

Преимущества:

  • Детерминированный (один и тот же вход = один и тот же выход)
  • Идеально подходит для преобразования известных идентификаторов
  • Отсутствие коллизий для различных входов

Недостатки:

  • MD5 — устаревший алгоритм (предпочтительнее v5)
  • Требует пространства имен и имени
  • Невозможно восстановить исходный ввод

UUID v4 (Случайный) - РЕКОМЕНДУЕТСЯ

Самая используемая версия UUID. UUID v4 генерируется чисто случайным образом с использованием криптографически безопасного генератора случайных чисел (crypto.getRandomValues()).

Использование:

  • Первичные ключи базы данных
  • Идентификаторы сеансов (session IDs)
  • Уникальные имена файлов
  • Токены API
  • Общее назначение, где требуется гарантированно уникальный ID

Пример: f47ac10b-58cc-4372-a567-0e02b2c3d479

Преимущества:

  • Максимальная энтропия и безопасность
  • Отсутствие зависимости от времени или системных параметров
  • Простейшая реализация

Вероятность коллизии: При генерации 1 миллиарда UUID в секунду в течение 100 лет вероятность коллизии составляет приблизительно 0,00000006%.

UUID v5 (SHA-1 хеш)

UUID v5 аналогичен v3, но использует SHA-1 вместо MD5. Более современная и безопасная альтернатива v3.

Использование:

  • То же, что и v3, но с лучшей безопасностью
  • Предпочтительно перед v3 для новых проектов
  • Генерация UUID из URL, DNS-имен, OID, X.500 DN

Пример: 886313e1-3b8a-5372-9b90-0c9aee199e5d

Преимущества:

  • Детерминированный
  • SHA-1 более надежен, чем MD5
  • Подходит для сопоставления между системами

Недостатки:

  • SHA-1 также считается устаревшим (но все еще безопаснее, чем MD5)
  • Требует пространства имен и имени

UUID v6 (Упорядоченная временная метка)

UUID v6 — это улучшенная версия v1 с переупорядоченными временными битами для лучшего индексирования БД. Предназначен для решения проблем с локальностью в базах данных.

Использование:

  • Первичные ключи базы данных с сортировкой по времени
  • Системы, требующие как хронологической сортировки, так и производительности БД
  • Более современная альтернатива v1

Пример: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

Преимущества:

  • Лучшая локальность БД, чем у v1 (временная метка в старших битах)
  • Хронологическая сортировка
  • Совместим со стандартом UUID

Недостатки:

  • Менее распространен, чем v1/v4
  • Все еще содержит временную информацию (риск безопасности)

UUID v7 (Метка времени Unix)

UUID v7 использует метку времени Unix (миллисекунды с 1970 года) + случайные биты. Новейшая версия UUID с лучшей локальностью БД.

Использование:

  • Современные первичные ключи базы данных
  • Системы, требующие производительности + сортировки по времени
  • Замена v1/v6 в новых проектах

Пример: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

Преимущества:

  • Лучшая локальность БД среди всех версий
  • Метка времени Unix является стандартной
  • Сочетает преимущества случайности и временной сортировки

Недостатки:

  • Относительно новая спецификация (RFC 4122bis)
  • Менее поддерживается в устаревших системах

Какую версию UUID использовать?

Руководство по выбору

Нужны максимальная безопасность и случайность? → Используйте UUID v4 (наиболее распространенный выбор)

Нужны временная сортировка и производительность БД? → Используйте UUID v7 (современный) или UUID v6 (стандартный)

Нужны воспроизводимые UUID из существующих идентификаторов? → Используйте UUID v5 (SHA-1) или UUID v3 (MD5, устаревший)

Нужны временная метка и журнал аудита? → Используйте UUID v1 (устаревший, худшая производительность БД)

Базы данных

Для новых проектов: UUID v7 или v4

  • v7 идеально подходит для сортировки по времени + производительности
  • v4 для максимальной случайности без временной информации

Для устаревших систем: UUID v1 или v6

  • v6 имеет лучшую локальность БД, чем v1
  • v1 широко поддерживается

Преимущества UUID в качестве первичного ключа:

  • Глобальная уникальность – Вы можете объединять данные из разных баз данных без конфликтов
  • Безопасность – В отличие от последовательных ID (1, 2, 3…), невозможно угадать следующие значения
  • Распределенные системы – UUID можно генерировать независимо на нескольких серверах без координации
  • Объединение баз данных – При слиянии двух баз данных не возникает конфликтов

Недостатки:

  • Больший размер (16 байтов против 4-8 байтов для целого числа)
  • Более медленное индексирование в некоторых базах данных (используйте v6/v7 для лучшей производительности)
  • Менее читабельны для человека

API и веб-сервисы

  • REST API – Уникальные идентификаторы для ресурсов
  • GraphQL – Глобальные идентификаторы для узлов
  • Вебхуки – Отслеживание запросов и ответов
  • Токены – Идентификаторы сеансов, токены обновления

Файлы и хранилища

  • Имена файлов – Предотвращение коллизий при загрузке
  • S3/Облачное хранилище – Уникальные пути к объектам
  • Ключи кеша – Идентификаторы в системах кеширования

Frontend-приложения

  • Компоненты React/Vue – Уникальные ключи для списков
  • Временные ID – ID перед сохранением в базу данных
  • Локальное хранилище – Ключи для сохраненных данных
  • Приложения с автономным режимом – Генерация ID без подключения к серверу

Расширенные функции генератора

Генерация UUID с собственным временем

Для версий, основанных на времени (v1, v6, v7), вы можете выбрать произвольную временную метку с помощью средства выбора даты и времени. Это полезно для:

Тестирование:

  • Симуляция UUID, созданных в прошлом
  • Тестирование временной сортировки в базах данных
  • Воспроизведение UUID для отладки

Миграция данных:

  • Генерация UUID с историческими временными метками
  • Заполнение данных с корректными значениями временных меток
  • Импорт данных из разных периодов времени

Аудит и соответствие:

  • Реконструкция UUID по времени создания записи
  • Ретроактивная генерация идентификаторов

Пример использования:

  1. Выберите версию v1, v6 или v7
  2. Установите дату и время с помощью средства выбора даты и времени
  3. Сгенерируйте UUID с вашей собственной временной меткой

UUID на основе хеша (v3, v5)

Для детерминированных UUID вы можете использовать версии v3 (MD5) или v5 (SHA-1):

Как использовать:

  1. Выберите пространство имен в соответствии с типом вашего идентификатора
  2. Введите имя/значение
  3. Сгенерируйте UUID

Примеры:

Пространство именИмя (ввод)Использование
DNSexample.comПреобразование доменного имени в UUID
DNSgoogle.comУ каждого веб-сайта есть уникальный UUID
URLhttps://example.com/pageПреобразование URL в UUID
URLhttps://api.example.com/users/123Конечная точка API как UUID
OID1.3.6.1.4.1.343Идентификатор объекта в UUID
X.500CN=John Doe,O=CompanyОтличительное имя в UUID

Важные свойства:

  • Детерминированный: Один и тот же вход = всегда один и тот же UUID
  • Воспроизводимый: Вы можете пересоздать UUID в любое время
  • Согласованный: Один и тот же UUID в разных системах
  • Не подлежит декодированию: Из UUID нельзя получить исходное имя
  • ℹ️ Один UUID: Для v3/v5 всегда генерируется только один UUID (один и тот же вход = один и тот же выход)

Практическое использование:

// Пример: Преобразование URL в UUID v5
// Пространство имен: URL
// Имя: https://example.com/api/users/123
// Результат: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Один и тот же вход = всегда один и тот же UUID
// Пространство имен: DNS
// Имя: google.com
// Результат: всегда один и тот же UUID для google.com

Как безопасно использовать UUID?

Криптографическая безопасность

Наш генератор использует crypto.getRandomValues(), который является криптографически безопасным генератором случайных чисел. В отличие от Math.random(), который предсказуем и непригоден для целей безопасности, crypto.getRandomValues() обеспечивает истинную энтропию, подходящую для:

  • Генерации токенов безопасности
  • Идентификаторов сеансов
  • Ключей API
  • Криптографических приложений

Сравнение версий UUID

ВерсияОсноваКоллизииВременная сортировкаПроизводительность БДИспользование
v1Метка времени + MACНизкая✅ Да❌ ХужеУстаревший, аудит
v3MD5 хешНет (детерминированный)❌ Нет⚠️ СредняяПреобразования (устаревший)
v4СлучайныйКрайне низкая❌ Нет⚠️ СредняяОбщее использование
v5SHA-1 хешНет (детерминированный)❌ Нет⚠️ СредняяПреобразования (рекомендуется)
v6Упорядоченная метка времениНизкая✅ Да✅ ЛучшеСовременная БД со временем
v7Метка времени UnixНизкая✅ Да✅ ЛучшаяНовые проекты

UUID против других идентификаторов

ТипРазмерКоллизииВременная сортировкаИспользование
Автоинкрементный ID4-8 байтовГарантированно уникален в пределах таблицыПростые приложения, локальная БД
UUID v416 байтовПрактически невозможнаРаспределенные системы, API
UUID v716 байтовПрактически невозможнаСовременная БД с производительностью
ULID16 байтовПрактически невозможнаUUID + лексикографическая сортировка
Snowflake ID8 байтовГарантированно уникален при правильной конфигурацииTwitter, распределенные системы
NanoIDНастраиваемыйЗависит от длиныURL-дружественные ID

Реализация на разных языках

JavaScript/TypeScript

// UUID v4 - Простейший способ (современные браузеры)
const uuid = crypto.randomUUID();

// UUID v4 - Ручная реализация
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - Рекомендуется для баз данных
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}

Python

import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())

Java

import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();

PHP

// UUID v4 (PHP 7+)
function generateUUID() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

C#

using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();

Лучшие практики

Хранение UUID в базе данных

PostgreSQL:

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

MySQL 8.0+:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Совет: В MySQL храните UUID как BINARY(16) вместо CHAR(36) для экономии места и более быстрого индексирования.

Валидация UUID

function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}

Конвертация UUID

// Удаление дефисов
const compact = uuid.replace(/-/g, '');

// Добавление дефисов обратно
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}

Решение проблем (Troubleshooting)

UUID v3/v5 не работает

Проблема: После выбора v3 или v5 ничего не генерируется

Решение:

  1. ✅ Убедитесь, что вы заполнили поле “Имя” - оно обязательно!
  2. ✅ Выберите правильное пространство имен в соответствии с типом вашего ввода
  3. ✅ Примеры допустимых входов:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Любой текст: my-application-v1

Совет: Попробуйте сначала простое значение, например test, и пространство имен DNS.

Временной UUID (v1, v6, v7) имеет странное время

Проблема: Сгенерированный UUID имеет неожиданную временную метку

Решение:

  1. ✅ Проверьте средство выбора даты и времени - установлено ли правильное время?
  2. ✅ Средство выбора даты и времени использует вашу локальную часовую зону
  3. ✅ Оставьте средство выбора даты и времени пустым для текущего времени

UUID не копируется

Проблема: Кнопка “Копировать все” не работает

Решение:

  1. ✅ Убедитесь, что вы сгенерировали UUID (они не пустые)
  2. ✅ Некоторые браузеры требуют HTTPS для API буфера обмена
  3. ✅ Альтернативно выберите текст в текстовой области и скопируйте вручную (Ctrl+C)

Часто задаваемые вопросы (FAQ)

Может ли произойти коллизия UUID? Теоретически да, но вероятность астрономически мала. При генерации 1 миллиарда UUID v4 в секунду в течение 100 лет вероятность коллизии составляет приблизительно 0,00000006%. На практике коллизии никогда не происходят.
Подходит ли UUID в качестве первичного ключа в базе данных? Зависит от сценария использования. UUID идеально подходит для распределенных систем и ситуаций, когда требуется глобальная уникальность. Для простых приложений с одной базой данных автоинкремент может быть более эффективным.
Безопасны ли UUID, сгенерированные этим инструментом? Да, мы используем Web Crypto API (`crypto.getRandomValues()`), который предоставляет криптографически безопасные случайные значения. Все происходит локально в вашем браузере.
В чем разница между версиями UUID? - **v1**: Временная метка + MAC/случайное - хронологическая сортировка, худшая производительность БД - **v3/v5**: На основе хеша - детерминированный, для преобразования известных идентификаторов - **v4**: Случайный - самый безопасный, наиболее используемый - **v6**: Переупорядоченная временная метка - лучшая производительность БД, чем у v1 - **v7**: Метка времени Unix - лучшая производительность БД + временная сортировка
Какую версию UUID мне следует использовать? В большинстве случаев используйте **v4** (случайный). Для баз данных с временной сортировкой используйте **v7** (современный) или **v6** (стандартный). Для преобразования известных идентификаторов (URL, DNS) используйте **v5** (SHA-1).
Могу ли я использовать UUID для токенов и ключей API? UUID v4 подходит для идентификаторов сеансов и подобных токенов. Для ключей API рассмотрите использование более длинных случайных строк (например, 256-битных значений) или специализированных библиотек.
Насколько велики UUID? UUID имеет 128 бит (16 байтов). В строковом формате с дефисами он занимает 36 символов. Без дефисов — 32 шестнадцатеричных символа.

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

ULID (Universally Unique Lexicographically Sortable Identifier)

  • 128-битный ID (так же как UUID)
  • Лексикографически сортируемый по времени создания
  • Более компактное представление (26 символов вместо 36)
  • Регистронезависимая кодировка base32

Пример: 01ARZ3NDEKTSV4RRFFQ69G5FAV

NanoID

  • Меньший размер, чем у UUID (21 символ по умолчанию)
  • URL-дружественный (без специальных символов)
  • Более быстрая генерация
  • Настраиваемая длина и алфавит

Пример: V1StGXR8_Z5jdHi6B-myT

Snowflake ID (Twitter)

  • 64-битный ID (меньше, чем UUID)
  • Сортируемый по времени
  • Содержит ID воркера и порядковый номер
  • Требует централизованной конфигурации

Пример: 1234567890123456789

Производительность и оптимизация

Скорость генерации

Наш генератор может сгенерировать:

  • 1 UUID: < 1 мс
  • 100 UUID: ~10-20 мс
  • 1000 UUID: ~100-200 мс

Советы по производительности

  1. Пакетная генерация – Если вам нужно много UUID, генерируйте их сразу, а не по одному
  2. Хранение в БД – Индексируйте столбцы UUID для быстрого поиска
  3. Сжатие – Храните UUID в бинарном виде (16 байтов) вместо строки (36 байтов)
  4. Кеширование – В некоторых случаях вы можете предварительно генерировать и кешировать UUID

Для разработчиков

Структура UUID v4

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 бит случайных данных (node)
|        |    |    └────── 16 бит случайных данных с вариантом (clock_seq)
|        |    └─────────── 12 бит случайных данных + 4 бита версии (time_hi_and_version)
|        └──────────────── 16 бит случайных данных (time_mid)
└───────────────────────── 32 бит случайных данных (time_low)
  • Версия (4 бита): всегда 0100 (двоичное) = 4 (шестнадцатеричное)
  • Вариант (2-3 бита): всегда 10 (двоичное) для RFC 4122

Тестирование UUID

// Jest test
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});

Аспекты безопасности

Что не следует делать с UUID

Не используйте UUID v1 для конфиденциальных приложений – Содержит временную метку, что может быть риском для безопасности

Не используйте Math.random() для генерации UUID – Не является криптографически безопасным

Не полагайтесь на UUID для авторизации – UUID можно угадать (хотя и с крайне малой вероятностью)

Не храните UUID в cookies без шифрования – Используйте подписанные cookies или JWT

Что следует делать

Используйте UUID v4 в большинстве случаев – Максимальная энтропия и безопасность

Комбинируйте UUID с другими мерами безопасности – Для управления сеансами используйте HTTPS, HttpOnly cookies и короткий срок действия

Проверяйте UUID на сервере – Всегда проверяйте формат и версию UUID

Используйте криптографически безопасные источники случайностиcrypto.getRandomValues() в браузере, /dev/urandom в Linux

Интересные факты

  • Количество возможных UUID v4: 2^122 ≈ 5.3 × 10^36 (340 ундециллионов)
  • Требуемая коллизия: Для 50% вероятности коллизии нужно сгенерировать 2.71 × 10^18 UUID (2.71 квинтиллионов)
  • Размер всех возможных UUID: Если бы мы хранили каждый UUID как 16 байтов, все пространство заняло бы 85 зеттабайтов (85 миллиардов терабайтов)
  • Происхождение: UUID был стандартизирован как часть DCE (Distributed Computing Environment) в 1990 году