Генератор UUID

Генеруйте UUID у браузері: повністю випадкові v4, впорядковані за часом v7 для баз даних або детерміновані v5 з простору імен та імені. До 1000 одразу, без відправки даних на сервер.

Натисніть «Згенерувати», щоб отримати результат
Версія
Розширені опції

Потрібен ідентифікатор, який не збігатиметься з тим, що створив хтось інший, на комп'ютері, про який ви ніколи не чули, і без необхідності просити в когось дозвіл? Саме це завдання виконує 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?

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 все ще може приймати лише певні версії чи одну письмову форму. У межах цих обмежень гарантія є надійною: кожен ідентифікатор створений за стандартом на вашому власному комп'ютері й ніколи не надсилається на наш сервер, а кожна його випадкова частина походить із криптографічно безпечного джерела.

FAQ

Як згенерувати UUID?

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

У чому різниця між UUID v4 та v7?

Версія 4 — це 122 випадкові біти без жодної структури взагалі, тому два з них не мають ніякого стосунку один до одного. Версія 7 витрачає перші 48 бітів на мілісекунду створення — цей генератор потім додає лічильник і 62 випадкові біти — а отже, її можна сортувати: партія виходить у тому порядку, в якому вона була створена. Використовуйте v4, коли ідентифікатор має бути лише унікальним, і v7, коли він також буде ключем бази даних.

Яку версію UUID мені слід використовувати?

Версію 4, якщо у вас немає причин вибрати іншу. Вибирайте версію 7, якщо ідентифікатор стає первинним ключем і швидкість вставки має значення, версію 5, якщо вам потрібно, щоб ті самі вхідні дані завжди давали однаковий ідентифікатор, і версію 1 лише в тому випадку, якщо система, з якою вам потрібно взаємодіяти, спеціально цього вимагає. Версія 3 — це версія 5 з MD5 замість SHA-1, і вона існує для сумісності.

Чи дійсно згенеровані UUID є випадковими та безпечними?

Випадковість є криптографічно безпечною: вона надходить від Web Crypto API вашого браузера через crypto.randomUUID() або crypto.getRandomValues(), а не від Math.random(). Безпечність у значенні «неможливо вгадати» — це інше питання, ніж безпечність у значенні «таємно»: UUID — це ідентифікатор, і його не слід використовувати як пароль, маркер сеансу або ключ API.

Чи можу я згенерувати багато UUID одночасно?

Так, до 1000 за один раз. Встановіть Кількість і натисніть Згенерувати; після п'ятдесяти значень результат стає єдиним блоком з прокруткою замість довгого списку рядків. Скопіювати все та Зберегти у файл забирають усю партію, об'єднану так, як вказано в опції Формат копіювання — по одному в рядку, через кому або в лапках для вставки в масив.

Чому v3 і v5 щоразу дають мені однаковий UUID?

Тому що саме для цього вони і призначені. Версії 3 і 5 є детермінованими: вони хешують надані вами простір імен та ім'я, тому однакові вхідні дані завжди дають однаковий ідентифікатор на будь-якому комп'ютері та в будь-якій мові. Це робить їх корисними для отримання стабільного ідентифікатора з того, що ви вже маєте, і саме тому поле Кількість приховується, коли ви їх вибираєте.

Що таке простір імен та ім'я, і який простір імен вибрати?

Це два вхідні параметри, з яких обчислюється UUID версії 3 або 5. Простір імен вказує на те, чим є ім'я — DNS для імен хостів, URL для адрес, OID та X.500 для відповідних схем каталогів, або Власний простір імен (UUID), якщо ви хочете надати свій власний UUID простору імен, що є звичним вибором всередині програми. Ім'я — це сам рядок. Різні простори імен дають абсолютно різні результати для того самого імені, у чому і полягає сенс їх наявності.

Чому UUID v7 кращий за v4 для первинного ключа бази даних?

Через те, куди потрапляють значення в індексі. Індекс B-tree, звичайний тип індексу, зберігається у відсортованому порядку, і випадковий ключ v4 потрапляє в нього будь-куди, тому вставки розщеплюють сторінки по всьому дереву, а частини, що утримуються в пам'яті, рідко виявляються тими, які будуть потрібні далі. Ключ v7 починається з поточної мілісекунди, тому послідовні вставки потрапляють разом у кінець індексу — подібно до того, як поводиться послідовний цілочисельний ключ, — водночас дозволяючи будь-якому сервісу створити ідентифікатор без звернення до центрального лічильника.

Чи можуть два UUID колись бути однаковими?

Версії 3 і 5 — так, і навмисно: однаковий простір імен та ім'я завжди дають один і той самий UUID. Для випадкових версій: у теорії так, а на практиці ні. Ніщо не перевіряє унікальність: існує просто 2^122 можливих значень версії 4, що становить близько 5,3 ундецильйона, і вам знадобилося б приблизно 2,7 квінтильйона таких ідентифікаторів — мільярд щосекунди протягом 86 років — перш ніж з'явився б шанс п'ятдесят на п'ятдесят для однієї колізії. Гарантія є статистичною, а не абсолютною, і вона залежить від того, чи є випадковість справжньою, що і є причиною, чому цей генератор використовує Web Crypto API замість звичайної псевдовипадкової функції.

Чи можу я використовувати UUID як пароль, ключ API або маркер сеансу?

Ні, і це помилка, яка обходиться найдорожче. UUID версії 4 є непередбачуваним, але з ідентифікаторами поводяться так, ніби вони публічні: вони потрапляють в URL-адреси, історію браузера, логи серверів, заголовки реферера та аналітику. Версії 1 і 7 додатково розкривають час свого створення, а версії 3 і 5 може заново обчислити будь-хто, хто знає вхідні дані. Для всього, що має залишатися таємним, використовуйте генератор паролів або токен з бібліотеки, призначеної для секретів.

Чи розкриває UUID v7 час свого створення?

Так, з точністю до мілісекунди, і це зроблено навмисно, а не через недогляд — саме мітка часу робить v7 придатним для сортування. Рядок під результатом показує вам час, закодований у першому значенні партії, тому ви можете точно бачити, що саме розкривається. Версія 1 також містить мітку часу. Якщо час створення — це те, що ви не хотіли б публікувати, версія 4 взагалі не містить жодного часу.

Чи розкриває UUID v1 мою MAC-адресу?

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

Що змінюють Великі літери, Без дефісів, Фігурні дужки та urn:uuid:?

Лише зовнішній вигляд — 128 бітів під ними однакові в будь-якій формі. Великі літери виводить шістнадцяткові цифри у верхньому регістрі, Без дефісів дає компактну версію з 32 символів, Фігурні дужки обгортає значення у { } так, як Windows і .NET записують GUID, а urn:uuid: додає префікс, який перетворює його на формальний URN. urn:uuid: вимикає дві інші опції, поки він увімкнений, оскільки стандарт визначає рівно одну форму URN, і це канонічна форма з дефісами.

Яка різниця між UUID та GUID?

Жодної в тексті, який ви копіюєте. GUID (globally unique identifier) — це назва, яку Microsoft використовує у Windows, .NET та SQL Server для того самого 128-бітного значення, яке RFC 9562 називає UUID. Інструменти Windows часто записують його великими літерами та у фігурних дужках, що й відтворюють опції Великі літери та Фігурні дужки.