Потрібен ідентифікатор, який не збігатиметься з тим, що створив хтось інший, на комп'ютері, про який ви ніколи не чули, і без необхідності просити в когось дозвіл? Саме це завдання виконує UUID. Це 128-бітне число, записане як 36 символів у знайомому форматі 8-4-4-4-12, і весь його дизайн полягає в тому, що два з них не будуть однаковими, навіть якщо ніщо не координує, хто який отримує. Цей безкоштовний генератор створює їх у вашому браузері: виберіть версію в полі Версія, вкажіть потрібну кількість у полі Кількість і натисніть Згенерувати. Сторінка відкривається з одним ідентифікатором v4 — версією, яка потрібна більшості проєктів, тому перший UUID знаходиться на відстані одного кліка.
Кожен ідентифікатор створюється у вашому браузері, і кожна його випадкова частина походить із Web Crypto API. Версія 4 використовує crypto.randomUUID(), якщо браузер це підтримує, та crypto.getRandomValues() в іншому випадку — це криптографічно надійне джерело випадковості, а не псевдовипадкова функція JavaScript на кшталт Math.random(). Версія 7 тут поміщає 48-бітну мітку часу в мілісекундах на початок, потім 12-бітний лічильник, який збільшується в межах тієї ж мілісекунди, і 62 випадкові біти — метод лічильника, описаний у RFC 9562, один із дозволених ним форматів; саме завдяки цьому лічильнику партія з тисячі виходить по порядку, а не перемішаною. Версія 1 поєднує мітку часу з випадковим ідентифікатором вузла, в якому встановлено біт багатоадресної розсилки, тому вона ніколи не містить адресу вашої мережевої карти, як це робили оригінальні реалізації 1990-х років. Версії 3 і 5 зовсім не є випадковими: вони хешують простір імен разом з іменем, використовуючи MD5 та SHA-1 відповідно, і це хешування, виконане власним кодом MD5 та SHA-1 сторінки, а не через Web Crypto, також відбувається на вашому пристрої. Ваші ідентифікатори ніколи не надсилаються на наш сервер, тому ми ніколи їх не бачимо й не фіксуємо в логах, і після завантаження сторінки інструмент продовжує працювати навіть з вимкненим інтернетом.
Версія — це поле, яке вирішує все інше. Версія 4 — це 122 випадкові біти без жодної структури: це варіант за замовчуванням і правильний вибір, коли ідентифікатор має бути лише унікальним. Версія 7 у цій реалізації зберігає 62 випадкові біти, але починається з часу створення, тому партія таких ідентифікаторів сортується в порядку їх створення; саме це робить її найкращим вибором, коли ідентифікатор стане ключем бази даних. Версія 1 — це оригінальна схема на основі часу, збережена тут для систем, які все ще її вимагають. Версії 3 і 5 — незвичайна пара: вони є детермінованими, тобто однакові вхідні дані завжди дають однаковий ідентифікатор, і вони використовують два додаткові поля — Простір імен, який є одним зі стандартних просторів DNS, URL, OID та X.500 або власним (Власний простір імен (UUID)), та Ім'я, тобто рядок, який ідентифікується. Передайте v5 простір імен URL і https://example.com/a, і ви отримаєте той самий UUID сьогодні, завтра і на чужому комп'ютері. Через це поле Кількість зникає, коли вибрано v3 або v5: тисяча копій одного детермінованого значення була б просто тисячею копій одного детермінованого значення. Для кожної іншої версії Кількість дозволяє вказати від 1 до 1000.
Чотири перемикачі змінюють форму виводу, не змінюючи 128 бітів під нею. Великі літери виводить шістнадцяткові цифри у верхньому регістрі, Без дефісів дає компактну форму з 32 символів, якій віддають перевагу деякі колонки та імена файлів, а Фігурні дужки огортає значення у { } — форму, в якій Windows та .NET зазвичай записують GUID. У розділі Розширені опції, urn:uuid: додає префікс, що перетворює його на формальний URN; він вимикає фігурні дужки та форму без дефісів, поки увімкнений, оскільки стандарт дозволяє рівно одну форму URN, і це канонічна форма з дефісами. Формат копіювання вирішує, як об'єднується партія, коли ви її копіюєте: по одному в рядку, через кому, або кожне значення в лапках з комою наприкінці, що вставляється прямо в масив у коді. Під результатом знаходиться рядок, який повідомляє про випадковість у бітах — 122 для v4, 62 для v7 — і, для v7, мітку часу, закодовану в першому ідентифікаторі партії, тому час всередині значення є видимим, а не прихованим. Скопіювати все та Зберегти у файл дотримуються вибраного Формат копіювання. Історія зберігає ваші останні 10 партій у вашому ж браузері: натисніть на одну, щоб повернути її, скопіюйте або видаліть окремий запис, або очистьте все. Очистити очищає результат, залишаючи ваші налаштування незмінними, а після 50 ідентифікаторів список стає єдиним блоком з прокруткою замість п'ятдесяти рядків.
Найбільш вагомою річчю на цій сторінці є різниця між v4 та v7 як первинним ключем, і це не справа смаку. Більшість індексів баз даних — це B-tree, які зберігаються у відсортованому порядку, і те, куди потрапить новий ключ у цьому порядку, визначає, скільки зусиль коштуватиме вставка. Ключ v4 є випадковим, тому послідовні вставки потрапляють у непов'язані кутки індексу: сторінки, які були заповненими, розщеплюються, частини дерева, які база даних тримає в пам'яті, рідко є тими частинами, які потрібні для наступної вставки, і індекс виходить більшим та фрагментованішим, ніж мали б рядки, на які він вказує. Ключ v7 починається з поточної мілісекунди, тому послідовні вставки потрапляють поруч одна з одною на правому краю дерева, подібно до цілого числа з автоінкрементом. Наскільки це вигідно, залежить від бази даних, її індексів та робочого навантаження, але компроміс саме такий: v7 приносить патерн вставки послідовного ключа, зберігаючи при цьому через яку ви взагалі обрали UUID, а саме те, що будь-хто може створити його, не звертаючись до сервера. Розплатою є те, що час створення тепер можна прочитати всередині ідентифікатора, і чи має це значення — це питання про ваші дані, а не про формат.
Ніщо ніколи не перевіряє UUID на унікальність; його розмір є гарантією. Немає жодного реєстру, жодного звернення до сервера, жодного пошуку — генератор просто створює число і віддає його, а причина, чому два з них не стикаються, полягає в тому, що існує 2^122 можливих значень v4, тобто близько 5,3 ундецильйонів. Парадокс днів народження — це чесний спосіб оцінити це: вам знадобилося б приблизно 2,7 квінтильйона ідентифікаторів, перш ніж з'явився б шанс п'ятдесят на п'ятдесят, що будь-які два з них збігатимуться, а це мільярд нових UUID щосекунди протягом 86 років. Варто бути точним щодо того, що це обіцяє і чого не обіцяє. Це статистична гарантія, а не арифметична, і вона діє лише тоді, коли випадковість під нею є справжньою — погано ініціалізований генератор або віртуальна машина, клонована разом з її пулом ентропії, порушує її так, що формат не може цього виявити. Версія 7 ще більше звужує це питання: у межах однієї партії цей генератор узагалі не може повторити значення, тому що лічильник збільшується, а не кидає кубики, і між незалежними генераторами 62 випадкові біти виконують усю роботу.
UUID — це ідентифікатор, а не пароль. Версія 4 є непередбачуваною, і це спонукає людей ставитися до неї як до таємниці — посилання для скидання пароля, URL-адреса, яку неможливо вгадати, маркер сеансу, ключ API. Непередбачуваність реальна, але таємність — це властивість того, як з об'єктом поводяться, а з ідентифікаторами поводяться недбало за визначенням: вони сидять в URL-адресах, які потрапляють в історію браузера, логи серверів, заголовки реферера та аналітику, і їх вставляють у повідомлення чатів. Інші версії є ще гіршими кандидатами. Версія 1 і версія 7 обидві кодують момент створення, тому будь-хто, хто тримає їх у руках, приблизно знає, коли вони були зроблені, і може звузити коло всього, що було створено разом з ними. Версії 3 і 5 є детермінованими навмисно: UUID v5 адреси електронної пошти — це не захешована таємниця, це значення, яке кожен, хто має таку саму адресу, може обчислити за секунду. Використовуйте UUID, щоб дати чомусь ім'я. Використовуйте генератор паролів або токен з бібліотеки, створеної для секретів, коли значення має залишатися невідомим.
Чому варто використовувати саме цей інструмент для генерації UUID?
- Генерація тільки в браузері: ідентифікатори створюються на вашому пристрої і ніколи не надсилаються на наш сервер
- Випадковість через Web Crypto API: криптографічно безпечно, а не Math.random()
- П'ять версій в одному місці: v1, v3, v4, v5 та v7, без необхідності перемикатися між інструментами
- По-справжньому впорядкована v7: лічильник всередині мілісекунди, як описано в RFC 9562
- Детерміновані v3 та v5 з чотирма стандартними просторами імен або вашим власним
- До 1000 за раз, з компактним списком з прокруткою для більш ніж п'ятдесяти значень
- Будь-який поширений формат: з дефісами, голий, великі літери, фігурні дужки або URN формату urn:uuid:
- Копіювання у вигляді рядків, через кому або значень у лапках, які вставляються прямо в код
- Безлімітно і безкоштовно: без реєстрації, без лімітів використання, нічого на наших серверах
UUID з'являються всюди, де чомусь потрібно дати ім'я до того, як будь-що зможе підтвердити, що це ім'я вільне. Код програми генерує їх для рядків, які він збирається вставити, щоб об'єкт мав ідентичність ще до того, як він досягне бази даних, і клієнт міг посилатися на нього, поки запис ще виконується. Розподілені системи покладаються на них ще більше: кілька сервісів, що пишуть в одну таблицю, офлайн мобільний клієнт, який створює записи в літаку, черга, яка повинна розпізнати повідомлення, яке вона вже опрацювала — жодна з цих систем не може чекати своєї черги за спільним лічильником. Версія 5 покриває іншу потребу, якою є стабільний ідентифікатор, отриманий з того, що ви вже маєте: той самий документ, та URL-адреса або той самий обліковий запис завжди відображається на той самий UUID, тому імпорт, який зіставляє записи за цим ідентифікатором, може виконуватися двічі без створення дублікатів. В інших місцях вони є просто форматом, якого вимагає система — ідентифікатор кореляції, протягнутий через логи та трейси, ім'я файлу, яке не конфліктуватиме, коли завантаження від тисячі користувачів потраплять в один бакет, ключ реєстру Windows, тестова фікстура, яка має виглядати як справжні дані.
Варто знати кілька чесних обмежень. Одна партія — це одна версія: значення в полі Версія стосується всього, що в ній є, тому генерація v4 і генерація v7 — це дві окремі партії. Це генератор, а не інспектор — вставка UUID для зчитування його версії або мітки часу не є чимось, що робить ця сторінка. Зберегти у файл записує звичайний текстовий файл, а не CSV або JSON. Версія 7 відкрито розкриває час свого створення з точністю до мілісекунди, що є реальним компромісом, а не недоліком, і версія 1 розкриває час так само; якщо для ваших даних це є проблемою, версія 4 — це та версія, яка нікому нічого не говорить. Два спеціальні значення зі стандарту не є версіями, а тому їх немає як опцій у полі Версія, але ви можете скопіювати їх звідси: nil UUID, 00000000-0000-0000-0000-000000000000, та max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Усе на цій сторінці відповідає RFC 9562, специфікації, яка замінила RFC 4122 у 2024 році, тож результат є стандартним текстом UUID, який читають бібліотеки та бази даних — хоча конкретний API все ще може приймати лише певні версії чи одну письмову форму. У межах цих обмежень гарантія є надійною: кожен ідентифікатор створений за стандартом на вашому власному комп'ютері й ніколи не надсилається на наш сервер, а кожна його випадкова частина походить із криптографічно безпечного джерела.