Генератор 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 по времени создания записи
- Ретроактивная генерация идентификаторов
Пример использования:
- Выберите версию v1, v6 или v7
- Установите дату и время с помощью средства выбора даты и времени
- Сгенерируйте UUID с вашей собственной временной меткой
UUID на основе хеша (v3, v5)
Для детерминированных UUID вы можете использовать версии v3 (MD5) или v5 (SHA-1):
Как использовать:
- Выберите пространство имен в соответствии с типом вашего идентификатора
- Введите имя/значение
- Сгенерируйте UUID
Примеры:
| Пространство имен | Имя (ввод) | Использование |
|---|---|---|
| DNS | example.com | Преобразование доменного имени в UUID |
| DNS | google.com | У каждого веб-сайта есть уникальный UUID |
| URL | https://example.com/page | Преобразование URL в UUID |
| URL | https://api.example.com/users/123 | Конечная точка API как UUID |
| OID | 1.3.6.1.4.1.343 | Идентификатор объекта в UUID |
| X.500 | CN=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 | Низкая | ✅ Да | ❌ Хуже | Устаревший, аудит |
| v3 | MD5 хеш | Нет (детерминированный) | ❌ Нет | ⚠️ Средняя | Преобразования (устаревший) |
| v4 | Случайный | Крайне низкая | ❌ Нет | ⚠️ Средняя | Общее использование |
| v5 | SHA-1 хеш | Нет (детерминированный) | ❌ Нет | ⚠️ Средняя | Преобразования (рекомендуется) |
| v6 | Упорядоченная метка времени | Низкая | ✅ Да | ✅ Лучше | Современная БД со временем |
| v7 | Метка времени Unix | Низкая | ✅ Да | ✅ Лучшая | Новые проекты |
UUID против других идентификаторов
| Тип | Размер | Коллизии | Временная сортировка | Использование |
|---|---|---|---|---|
| Автоинкрементный ID | 4-8 байтов | Гарантированно уникален в пределах таблицы | ❌ | Простые приложения, локальная БД |
| UUID v4 | 16 байтов | Практически невозможна | ❌ | Распределенные системы, API |
| UUID v7 | 16 байтов | Практически невозможна | ✅ | Современная БД с производительностью |
| ULID | 16 байтов | Практически невозможна | ✅ | UUID + лексикографическая сортировка |
| Snowflake ID | 8 байтов | Гарантированно уникален при правильной конфигурации | ✅ | 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 ничего не генерируется
Решение:
- ✅ Убедитесь, что вы заполнили поле “Имя” - оно обязательно!
- ✅ Выберите правильное пространство имен в соответствии с типом вашего ввода
- ✅ Примеры допустимых входов:
- DNS:
example.com,google.com - URL:
https://example.com/page - Любой текст:
my-application-v1
- DNS:
Совет: Попробуйте сначала простое значение, например test, и пространство имен DNS.
Временной UUID (v1, v6, v7) имеет странное время
Проблема: Сгенерированный UUID имеет неожиданную временную метку
Решение:
- ✅ Проверьте средство выбора даты и времени - установлено ли правильное время?
- ✅ Средство выбора даты и времени использует вашу локальную часовую зону
- ✅ Оставьте средство выбора даты и времени пустым для текущего времени
UUID не копируется
Проблема: Кнопка “Копировать все” не работает
Решение:
- ✅ Убедитесь, что вы сгенерировали UUID (они не пустые)
- ✅ Некоторые браузеры требуют HTTPS для API буфера обмена
- ✅ Альтернативно выберите текст в текстовой области и скопируйте вручную (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 мс
Советы по производительности
- Пакетная генерация – Если вам нужно много UUID, генерируйте их сразу, а не по одному
- Хранение в БД – Индексируйте столбцы UUID для быстрого поиска
- Сжатие – Храните UUID в бинарном виде (16 байтов) вместо строки (36 байтов)
- Кеширование – В некоторых случаях вы можете предварительно генерировать и кешировать 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 году