UUID Decoder
Decode and inspect UUID structure, version, and embedded data
Введення UUID
Вставте UUID вище для інспекції
Структура UUID
UUID — 128-бітний ідентифікатор, представлений як 32 шістнадцяткові символи, розділені дефісами в п'яти групах:
Дефіси є суто косметичними. UUID також представляються без дефісів як 32-символьний рядок.
Поле версії UUID
Версія кодується в першому ніббліc третьої групи (символи 13-15 у стандартному UUID).
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 xxxx | 0x00–0x7F | NCS сумісність | Зарезервовано для зворотної сумісності NCS |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | RFC 4122 / RFC 9562 UUID — стандартний варіант |
| 110x xxxx | 0xC0–0xDF | Сумісність з Microsoft | Зарезервовано для сумісності з GUID Microsoft |
| 111x xxxx | 0xE0–0xFF | Зарезервовано | Зарезервовано для майбутнього використання |
На практиці майже всі UUID, з якими ви стикаєтесь, використовують варіант RFC 4122 / RFC 9562 (бітовий патерн 10xx xxxx, перший байт четвертої групи в діапазоні 0x80–0xBF). Варіанти NCS, Microsoft COM та Reserved — це застарілі формати, що рідко зустрічаються в сучасних системах.
Версії UUID
У межах стандартного варіанта RFC 4122/9562 визначено вісім версій UUID:
| Версія | Ім'я | Стандарт | Опис |
|---|---|---|---|
| v1 | На основі часу | RFC 4122 | 60-бітна Gregorian-часова мітка + MAC-адреса або випадковий вузол |
| v2 | DCE Security | RFC 4122 | Як v1, але time_low замінено UID/GID POSIX |
| v3 | На основі MD5 хешу | RFC 4122 | MD5 хеш UUID простору імен + імені |
| v4 | Випадковий | RFC 4122 | 122 біти криптографічно захищеної випадковості |
| v5 | На основі SHA-1 хешу | RFC 4122 | SHA-1 хеш UUID простору імен + імені |
| v6 | Впорядкований за часом | RFC 9562 | Як v1, але поля переставлені для лексикографічного сортування (RFC 9562) |
| v7 | Unix Epoch на основі часу | RFC 9562 | 48-бітна Unix-часова мітка в мс + 74 біти випадкових даних (RFC 9562) |
| v8 | Користувацький | RFC 9562 | Зарезервовано для користувацьких/експериментальних UUID (RFC 9562) |
Декодування UUID v1
UUID v1 кодує високоточну часову мітку в трьох полях. Часова мітка базується на Gregorian-епосі (15 жовтня 1582).
// 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
Поле вузла містить MAC-адресу хоста або випадкове значення з встановленим бітом multicast.
Декодування UUID v7
UUID v7 кодує 48-бітну Unix-часову мітку в мс у найзначущих бітах. Вилучається без епохового зміщення.
// 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 додатково декодує поля часової мітки.
// 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).