fixmint
UK

UUID v4 чи v7: який обрати і чому це важливо

Автор: · · оновлено 8 листопада 2026 р. · 5 хв читання

Використовуйте UUID v4, коли вам потрібен випадковий ідентифікатор і нічого більше. Використовуйте UUID v7, коли ідентифікатор буде ключем у базі даних або коли ви хочете, щоб ідентифікатори сортувалися за часом створення. Обидві версії мають 128 біт і записуються однаковою 36-символьною формою, тож різниця полягає в тому, як розташовані біти. Генератор UUID нижче створює будь-яку з версій, від одного до 500 за раз, прямо у вашому браузері.

Генератор UUIDПотрібні унікальні ID для кодуБезкоштовно

Як виглядає UUID

UUID, або універсальний унікальний ідентифікатор, — це 128-бітне число, записане як 32 шістнадцяткові цифри в п'яти групах: 8, 4, 4, 4 і 12 цифр, розділених дефісами. Приклад: 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.

Дві частини числа фіксовані. Чотири біти відводяться на версію, тому третя група починається з 4 для v4 або з 7 для v7. Два біти відводяться на варіант, тому четверта група починається з 8, 9, a або b. Решта несе сам ідентифікатор. Саме через біти версії та варіанту в UUID v4 є 122 випадкові біти, а не 128.

UUID v4: випадковий

UUID v4 є випадковим, за винятком цих фіксованих бітів. Його 122 випадкові біти роблять повтор надзвичайно малоймовірним. Припустімо, ви згенерували мільярд UUID v4. Імовірність того, що якісь два збігаються, приблизно дорівнює n у квадраті, поділеному на подвоєну кількість можливих значень, що становить близько 10 у мінус 19-му степені. Інакше кажучи, колізій не потрібно проєктувати наперед.

Ця оцінка припускає, що генератор бере біти з криптографічного джерела випадковості. Передбачуваний генератор підірвав би таку оцінку. Цей інструмент використовує криптографічне джерело випадковості браузера, через crypto.randomUUID або crypto.getRandomValues.

UUID v7: спочатку час

RFC 9562 визначає v7. Перші 48 бітів містять час Unix у мілісекундах, тож ідентифікатор, створений пізніше, має більшу першу частину, ніж створений раніше. Далі йдуть біти версії, потім випадкові біти, біти варіанту та ще випадкові біти. Частина випадкового простору може вміщувати лічильник, який утримує ідентифікатори в порядку, коли кілька з них створюються в межах однієї мілісекунди.

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

Час також видно. Той, хто бачить UUID v7, може дізнатися приблизно, коли його створили. Ви можете перевірити це самостійно в полі «Перевірити» в генераторі UUID, яке перетворює перші 48 бітів назад на дату й час.

Чому v7 підходить для індексів бази даних

Індекс бази даних зазвичай є B-деревом, структурою, яка зберігається впорядкованою за ключем. Коли ключ випадковий, як у v4, кожен новий рядок потрапляє у випадкове місце індексу. База даних змушена писати в багато різних частин індексу, що спричиняє більше поділів сторінок і більше промахів кешу. У великій таблиці ця робота накопичується.

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

Вибір між v4 і v7

  • Первинні ключі бази даних або будь-яка таблиця, що зростає з часом: v7. Індекс залишається впорядкованим.
  • Журнали, події чи повідомлення, які ви часто сортуєте за часом: v7, бо сам ідентифікатор несе порядок.
  • Публічні ідентифікатори, де час створення має лишатися прихованим: v4. Ідентифікатор v7 показує, коли його створили.
  • Багато пристроїв із ненадійними годинниками: і v4, і v7 лишаються унікальними, бо цю роботу виконують випадкові біти. Лише порядок сортування v7 залежить від того, чи точні годинники.

Обидві версії стандартні, але старіші бібліотеки можуть знати лише v4. Протягом багатьох років RFC 4122 описував версії від 1 до 5. RFC 9562 опублікований у травні 2024 року, замінює RFC 4122 і визначає версії 6, 7 та 8. Перш ніж покладатися на v7, переконайтеся, що версія вашої бібліотеки його підтримує.

Зберігання UUID

UUID, записаний як текст, займає 36 символів. Його 16 байтів можна зберігати у двійковій формі, що займає значно менше місця. Багато баз даних мають вбудований тип UUID або двійковий стовпець на 16 байтів для цього, і порівнювати такі значення швидше, ніж тексти.

Оберіть один формат і дотримуйтеся його. Великі літери, малі літери, дефіси та фігурні дужки для людини означають той самий UUID, але база даних або порівняння рядків можуть вважати їх різними значеннями. Параметри генератора «великі літери», «без дефісів» і «фігурні дужки» існують для систем, яким потрібна саме така форма.

Ніколи не використовуйте UUID як секрет

UUID є ідентифікатором, а не паролем, токеном сесії чи ключем доступу. Його створено, щоб він був унікальним, а не щоб його не можна було вгадати. UUID v7 до того ж містить час створення. А ідентифікатори вставляють у посилання, журнали, листи та скриншоти, де кожен, хто їх побачить, може ними скористатися повторно.

Контроль доступу має бути на сервері. Людина, яка знає ідентифікатор, не повинна автоматично отримувати право бачити чи змінювати запис, який він позначає. Для паролів, парольних фраз або токенів використовуйте генератор, створений для секретів. Генератор паролів створює випадкові паролі або парольні фрази з words на вашому пристрої з криптографічно надійною випадковістю та оцінює їхню міцність. Щоб дізнатися, чому важливі довжина й випадковість, прочитайте міцні паролі та ентропію.

Як користуватися інструментом

  1. Оберіть версію 4 для випадкових ідентифікаторів або версію 7 для ідентифікаторів, які сортуються за часом.
  2. Встановіть кількість, від 1 до 500 за раз.
  3. Позначте «великі літери», «без дефісів» або «фігурні дужки», якщо вашому коду потрібна певна форма.
  4. Скопіюйте всі або завантажте список як файл .txt.
  5. Вставте будь-який UUID у поле «Перевірити», щоб побачити його версію, варіант і, для v7, вбудований час.

Короткі відповіді

Чи унікальний UUID v4? На практиці так. Його 122 випадкові біти роблять повтор настільки малоймовірним, що перевіряти його не потрібно.

Чи варто використовувати v7 для всього? Не завжди. Використовуйте v7 для ключів бази даних і всього, що сортується за часом. Використовуйте v4, коли час створення має лишатися прихованим.

Чи можна використовувати UUID як пароль? Ні. Це ідентифікатор. Для всього, що має залишатися секретом, використовуйте генератор паролів.

Чи надсилає інструмент ідентифікатори кудись? Ні. Ідентифікатори створюються й показуються у вашому браузері, на сервер вони не надсилаються.

Переклад з Англійський оригінал за допомогою ШІ.

Коментарі

    Коментарів поки немає. Будьте першим.

    Ваша оцінка (необов’язково)

    Ваша пошта ніколи не показується і не зберігається.

    Обкладинка: Open Data for AGI - Why Public, Free, and Open Datasets MatterOpen Data for AGI - Why Public, Free, and Open Datasets Matter

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

    $4.99Придбати на GumroadАнглійською