UUID Decoder

Decode and inspect UUID structure, version, and embedded data

Спробувати приклад

Введення UUID

Вставте UUID вище для інспекції

Структура UUID

UUID — 128-бітний ідентифікатор, представлений як 32 шістнадцяткові символи, розділені дефісами в п'яти групах:

Стандартний формат:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)32-бітний — історичне поле time_low (або випадкові біти у v4)
xxxx (4)16-бітний — історичне поле time_mid (або випадкові біти у v4)
Mxxx (4)Ніббл версії + поле time_hi або випадкові біти
Nxxx (4)Маркер варіанта + тактовий лічильник або випадкові біти
xxxxxxxxxxxx (12)48-бітний — MAC-адреса або випадкові біти

Дефіси є суто косметичними. UUID також представляються без дефісів як 32-символьний рядок.

Поле версії UUID

Версія кодується в першому ніббліc третьої групи (символи 13-15 у стандартному UUID).

JavaScript
const hex = uuid.replace(/-/g, '')
const version = parseInt(hex[12], 16)  // single hex digit → 1, 2, 3, 4, 5, 6, 7, or 8

Версія 7 (UUID v7) — найновіша широко використовувана версія, введена в RFC 9562 (2024). Вона кодує Unix-мілісекундний timestamp у старших бітах для забезпечення сортованості.

Поле варіанта UUID

Варіант кодується у найзначущих бітах першого байта четвертої групи.

БітиДіапазон нібблаВаріантОпис
0xxx xxxx0x00–0x7FNCS сумісністьЗарезервовано для зворотної сумісності NCS
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562RFC 4122 / RFC 9562 UUID — стандартний варіант
110x xxxx0xC0–0xDFСумісність з MicrosoftЗарезервовано для сумісності з GUID Microsoft
111x xxxx0xE0–0xFFЗарезервованоЗарезервовано для майбутнього використання

На практиці майже всі UUID, з якими ви стикаєтесь, використовують варіант RFC 4122 / RFC 9562 (бітовий патерн 10xx xxxx, перший байт четвертої групи в діапазоні 0x80–0xBF). Варіанти NCS, Microsoft COM та Reserved — це застарілі формати, що рідко зустрічаються в сучасних системах.

Версії UUID

У межах стандартного варіанта RFC 4122/9562 визначено вісім версій UUID:

ВерсіяІм'яСтандартОпис
v1На основі часуRFC 412260-бітна Gregorian-часова мітка + MAC-адреса або випадковий вузол
v2DCE SecurityRFC 4122Як v1, але time_low замінено UID/GID POSIX
v3На основі MD5 хешуRFC 4122MD5 хеш UUID простору імен + імені
v4ВипадковийRFC 4122122 біти криптографічно захищеної випадковості
v5На основі SHA-1 хешуRFC 4122SHA-1 хеш UUID простору імен + імені
v6Впорядкований за часомRFC 9562Як v1, але поля переставлені для лексикографічного сортування (RFC 9562)
v7Unix Epoch на основі часуRFC 956248-бітна Unix-часова мітка в мс + 74 біти випадкових даних (RFC 9562)
v8КористувацькийRFC 9562Зарезервовано для користувацьких/експериментальних UUID (RFC 9562)

Декодування UUID v1

UUID v1 кодує високоточну часову мітку в трьох полях. Часова мітка базується на Gregorian-епосі (15 жовтня 1582).

JavaScript
// UUID v1: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
//           ^^^^^^^^ ^^^^ ^^^^ ^^^^^ ^^^^^^^^^^^^
//           time-low  mid  hi  clk   node (MAC)
//                          ^
//                          version nibble (1)

const hex = '6ba7b8109dad11d180b400c04fd430c8'

const tLow = parseInt(hex.slice(0, 8),  16)  // 0x6ba7b810
const tMid = parseInt(hex.slice(8, 12), 16)  // 0x9dad
const tHi  = parseInt(hex.slice(13, 16), 16) // 0x1d1 (skip version nibble at index 12)

// Reconstruct 60-bit timestamp (100-ns intervals since Oct 15, 1582)
const t = (BigInt(tHi) << 48n) | (BigInt(tMid) << 32n) | BigInt(tLow)

// Subtract Gregorian offset (Oct 15, 1582 → Jan 1, 1970 in 100-ns units)
const GREGORIAN_OFFSET = 122192928000000000n
const unixMs = (t - GREGORIAN_OFFSET) / 10000n

console.log(new Date(Number(unixMs)).toISOString())
// → 1998-02-04T22:13:53.578Z
Note:Для декодування: об'єднайте time_hi, time_mid і time_low у 60-бітне ціле, відніміть зміщення Gregorian-епохи і перетворіть у POSIX-час.

Поле вузла містить MAC-адресу хоста або випадкове значення з встановленим бітом multicast.

Декодування UUID v7

UUID v7 кодує 48-бітну Unix-часову мітку в мс у найзначущих бітах. Вилучається без епохового зміщення.

JavaScript
// UUID v7: 018e4bc8-1000-7000-8000-000000000001
//           ^^^^^^^^^^^^
//           48-bit Unix ms timestamp

const hex = '018e4bc8100070008000000000000001'

// First 48 bits (12 hex chars) = Unix timestamp in milliseconds
const ms = parseInt(hex.slice(0, 12), 16)  // 0x018e4bc81000

console.log(new Date(ms).toISOString())
// → 2024-03-11T…Z

// Everything after byte 6 is random (except version/variant bits)

Перші 12 символів UUID v7 (без дефісів) кодують часову мітку.

Як працює виявлення UUID

Декодер вилучає версію із символів 13-15. Для v1 і v7 додатково декодує поля часової мітки.

JavaScript
// Detect UUID version from the 13th hex character (index 12)
function uuidVersion(uuid) {
  const clean = uuid.replace(/-/g, '')
  return parseInt(clean[12], 16)
}

uuidVersion('550e8400-e29b-41d4-a716-446655440000') // → 4
uuidVersion('018e4bc8-1000-7000-8000-000000000001') // → 7
uuidVersion('6ba7b810-9dad-11d1-80b4-00c04fd430c8') // → 1

// Detect variant from the 17th hex character (index 16, first char of 4th group)
function uuidVariant(uuid) {
  const clean = uuid.replace(/-/g, '')
  const b = parseInt(clean[16], 16)
  if ((b & 0x8) === 0)      return 'NCS'
  if ((b & 0xC) === 0x8)    return 'RFC 4122'
  if ((b & 0xE) === 0xC)    return 'Microsoft'
  return 'Reserved'
}

Спеціальні UUID

NIL UUID

NIL UUID — 00000000-0000-0000-0000-000000000000 — всі 128 бітів дорівнюють нулю. Означає «відсутність UUID».

MAX UUID

MAX UUID — ffffffff-ffff-ffff-ffff-ffffffffffff — всі 128 бітів дорівнюють одиниці (RFC 9562).

Часті запитання

Як декодер визначає версію UUID?
Перевіряє перший ніббл третьої групи. Значення 1-8 вказує версію RFC 4122/9562.
Що означає варіант UUID?
Залежить від версії. UUID v1 і v7 містять часову мітку, яку можна повністю відновити. UUID v1 також містить MAC-адресу. UUID v3 і v5 — односторонні хеші: відновити вихідне ім'я з UUID неможливо. UUID v4 повністю випадковий — відновлювати нічого.
Чи можна зворотньо обчислити UUID v4, щоб знайти час створення?
Ні. UUID v4 повністю випадковий — без часової мітки. UUID v1 і v7 кодують часову мітку.
Що таке компактний UUID без дефісів?
32-символьний шістнадцятковий рядок — функціонально ідентичний форматованому UUID. Декодер приймає обидва формати.
Верхній регістр vs нижній в UUID?
UUID є нечутливим до регістру за RFC 4122. Декодер приймає обидва варіанти.
Чи можуть UUID із різних систем конфліктувати?
UUID v4 — вкрай малоймовірно. UUID v1 — неможливо для різних машин і часів. UUID v3/v5 — конфліктів немає при різних вхідних даних.
GUID — те саме, що UUID?
GUID (Globally Unique Identifier) — назва Microsoft для того самого поняття. GUID слідують тому ж 128-бітному формату RFC 4122. Єдина практична різниця полягає в тому, що застарілі Microsoft GUID можуть використовувати варіант Microsoft (старші біти 110), а не варіант RFC 4122 — це впливає на порядок байтів у бінарному представленні. Текстове представлення ідентичне.