Bộ giải mã UUID
Giải mã và kiểm tra cấu trúc, phiên bản và dữ liệu nhúng của UUID
Nhập UUID
Dán UUID ở trên để kiểm tra
Cấu trúc UUID
UUID (Universally Unique Identifier) là giá trị 128-bit được biểu diễn dưới dạng 32 chữ số thập lục phân được chia thành năm nhóm bằng dấu gạch nối:
Phiên bản và biến thể là hai trường được đảm bảo có mặt trong mọi UUID.
Trường Phiên bản
Nibble phiên bản là chữ số hex đầu tiên của nhóm thứ ba (vị trí 14 trong chuỗi đầy đủ).
const hex = uuid.replace(/-/g, '') const version = parseInt(hex[12], 16) // single hex digit → 1, 2, 3, 4, 5, 6, 7, or 8
Phiên bản 7 (UUID v7) là phiên bản mới nhất được sử dụng rộng rãi, được giới thiệu trong RFC 9562 (2024).
Trường Biến thể
Biến thể được mã hóa trong các bit cao của byte đầu tiên của nhóm thứ tư.
| Bit cao | Phạm vi chữ số hex đầu tiên | Biến thể | Mô tả |
|---|---|---|---|
| 0xxx xxxx | 0x00–0x7F | Tương thích ngược NCS | UUID NCS (Network Computing System) cũ. Được dành riêng để tương thích ngược. |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | Biến thể UUID RFC 4122 / RFC 9562 tiêu chuẩn. Được sử dụng bởi tất cả các phiên bản UUID hiện đại (v1–v8). |
| 110x xxxx | 0xC0–0xDF | Tương thích ngược Microsoft | GUID Microsoft COM/DCOM cũ với thứ tự byte khác. Vẫn gặp trong các thành phần Windows COM. |
| 111x xxxx | 0xE0–0xFF | Dành riêng | Dành riêng cho định nghĩa trong tương lai. Không được sử dụng bởi bất kỳ phiên bản UUID hiện tại nào. |
Trong thực tế, hầu hết các UUID bạn gặp đều sử dụng biến thể RFC 4122 / RFC 9562 (mẫu bit 10xx xxxx, byte đầu tiên của nhóm thứ tư trong phạm vi 0x80–0xBF). Các biến thể NCS, Microsoft COM và Reserved là các định dạng cũ hiếm khi xuất hiện trong các hệ thống hiện đại.
Tham chiếu Phiên bản UUID
RFC 4122 định nghĩa các phiên bản 1–5. RFC 9562 (2024) thêm các phiên bản 6, 7, và 8:
| Phiên bản | Tên | Tiêu chuẩn | Mô tả |
|---|---|---|---|
| v1 | Dựa trên thời gian | RFC 4122 | Timestamp (epoch Gregorian, độ chính xác 100ns) + địa chỉ MAC. Tuần tự theo máy chủ nhưng rò rỉ danh tính máy chủ. |
| v2 | DCE Security | RFC 4122 | Dựa trên UUID v1 với trường time_low được thay thế bởi POSIX UID/GID. Hiếm khi dùng ngoài hệ thống DCE/RPC cũ. |
| v3 | Dựa trên tên MD5 | RFC 4122 | Xác định: hash MD5 của UUID namespace + chuỗi tên. Cùng đầu vào luôn tạo ra cùng UUID. Ưu tiên v5. |
| v4 | Ngẫu nhiên | RFC 4122 | 122 bit ngẫu nhiên an toàn về mặt mật mã. Phiên bản UUID đa mục đích phổ biến nhất. |
| v5 | Dựa trên tên SHA-1 | RFC 4122 | Giống v3 nhưng sử dụng SHA-1. Kháng va chạm hơn MD5. Được ưu tiên hơn v3 cho UUID dựa trên tên mới. |
| v6 | Thời gian Sắp xếp lại | RFC 9562 | Sắp xếp lại các trường timestamp UUID v1 để UUID có thể sắp xếp theo trình tự thời gian. Được định nghĩa trong RFC 9562. |
| v7 | Thời gian Unix | RFC 9562 | Timestamp Unix mili giây 48-bit ở bit cao + dữ liệu ngẫu nhiên. Có thể sắp xếp và thân thiện với chỉ mục B-tree. Ưu tiên cho ID theo thứ tự thời gian mới. |
| v8 | Tùy chỉnh | RFC 9562 | Hình thức tự do: tất cả bit ngoại trừ phiên bản và biến thể được xác định bởi ứng dụng. Không có thuật toán tạo nào được chỉ định. |
Giải mã Timestamp UUID v1
UUID v1 nhúng timestamp Gregorian 60-bit (khoảng cách 100 nano giây kể từ ngày 15 tháng 10 năm 1582) được phân tán qua ba trường.
// 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
UUID v1 nên được xử lý như thông tin nhạy cảm: địa chỉ MAC nhúng và timestamp chính xác có thể xác định cả máy tạo và thời gian tạo.
Giải mã Timestamp UUID v7
UUID v7 nhúng timestamp Unix mili giây 48-bit vào 48 bit đầu tiên (nhóm đầu tiên + 4 chữ số đầu tiên của nhóm thứ hai).
// 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)
Không giống UUID v1, timestamp UUID v7 sử dụng epoch Unix quen thuộc (1 tháng 1 năm 1970) và không nhúng bất kỳ thông tin máy chủ nào.
Cách Công cụ này Phát hiện Phiên bản và Biến thể UUID
Bộ giải mã đọc vị trí 14 (nibble phiên bản) và vị trí 19 (nibble biến thể) của chuỗi UUID chính tắc.
// 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 Đặc biệt
Nil UUID
Nil UUID 00000000-0000-0000-0000-000000000000 là tất cả số không. Được định nghĩa bởi RFC 4122 là giá trị sentinel có nghĩa là 'không có UUID' — tương tự như null.
Max UUID
Max UUID ffffffff-ffff-ffff-ffff-ffffffffffff là tất cả số một (0xFF trong mỗi byte). Được định nghĩa trong RFC 9562.