UUID Decoder
Decode and inspect UUID structure, version, and embedded data
Vstup UUID
Vložte UUID výše pro jeho inspekci
Struktura UUID
UUID (Universally Unique Identifier) je 128bitová hodnota reprezentovaná jako 32 hexadecimálních číslic rozdělených do pěti skupin pomlčkami:
Verze a varianta jsou jediná dvě pole zaručeně přítomná v každém UUID. Všechna ostatní pole závisí na verzi.
Pole verze
Nibble verze je první hexadecimální číslice třetí skupiny (pozice 14 v plném řetězci). Identifikuje, která verze UUID byla použita ke generování identifikátoru.
const hex = uuid.replace(/-/g, '') const version = parseInt(hex[12], 16) // single hex digit → 1, 2, 3, 4, 5, 6, 7, or 8
Verze 7 (UUID v7) je nejnovější široce používaná verze, zavedená v RFC 9562 (2024). Kóduje Unix millisekudové časové razítko ve vysokých bitech pro seřaditelnost.
Pole varianty
Varianta je kódována ve vysokých bitech prvního bajtu čtvrté skupiny. Identifikuje konvence rozvržení a pořadí bajtů používané UUID.
| Vysoké bity | Rozsah první hexadecimální číslice | Varianta | Popis |
|---|---|---|---|
| 0xxx xxxx | 0x00–0x7F | Zpětná kompatibilita NCS | Starší UUID Network Computing System (NCS). Rezervováno pro zpětnou kompatibilitu. |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | Standardní varianta UUID RFC 4122 / RFC 9562. Používána všemi moderními verzemi UUID (v1–v8). |
| 110x xxxx | 0xC0–0xDF | Zpětná kompatibilita Microsoft | Starší Microsoft COM/DCOM GUIDs s jiným pořadím bajtů. Stále se vyskytuje v komponentách Windows COM. |
| 111x xxxx | 0xE0–0xFF | Rezervováno | Rezervováno pro budoucí definici. Nepoužíváno žádnou aktuální verzí UUID. |
V praxi téměř všechna UUID, se kterými se setkáte, používají variantu RFC 4122 / RFC 9562 (vzor bitů 10xx xxxx, první byte čtvrté skupiny v rozsahu 0x80–0xBF). Varianty NCS, Microsoft COM a Reserved jsou starší formáty, které se v moderních systémech vyskytují jen zřídka.
Reference verzí UUID
RFC 4122 definovalo verze 1–5. RFC 9562 (2024) přidalo verze 6, 7 a 8:
| Verze | Název | Standard | Popis |
|---|---|---|---|
| v1 | Na základě času | RFC 4122 | Časové razítko (gregoriánská epocha, přesnost 100ns) + MAC adresa. Sekvenční na hostitele, ale prozrazuje identitu hostitele. |
| v2 | DCE Security | RFC 4122 | Založeno na UUID v1 s polem time_low nahrazeným POSIX UID/GID. Zřídka používáno mimo starší systémy DCE/RPC. |
| v3 | Na základě názvu MD5 | RFC 4122 | Deterministické: MD5 hash UUID jmenného prostoru + řetězce názvů. Stejné vstupy vždy dávají stejné UUID. Preferujte v5. |
| v4 | Náhodné | RFC 4122 | 122 bitů kryptograficky bezpečné náhodnosti. Nejběžnější verze UUID pro obecné účely. |
| v5 | Na základě názvu SHA-1 | RFC 4122 | Jako v3, ale používá SHA-1. Odolnější vůči kolizím než MD5. Preferováno před v3 pro nová UUID na základě názvů. |
| v6 | Přeuspořádaný čas | RFC 9562 | Přeuspořádá pole časového razítka UUID v1, takže UUID je chronologicky seřaditelné. Definováno v RFC 9562. |
| v7 | Unix čas | RFC 9562 | 48bitové Unix millisekudové časové razítko ve vysokých bitech + náhodná data. Seřaditelné a přívětivé pro B-tree index. Preferováno pro nová časově uspořádaná ID. |
| v8 | Vlastní | RFC 9562 | Volná forma: všechny bity kromě verze a varianty jsou definovány aplikací. Není specifikován žádný algoritmus generování. |
Dekódování časových razítek UUID v1
UUID v1 obsahuje 60bitové gregoriánské časové razítko (intervaly 100 nanosekund od 15. října 1582) rozdělené přes tři pole: time_low (bity 0–31), time_mid (bity 32–47) a time_hi (bity 48–59). Tento nástroj je znovu sestaví a převede na standardní datum UTC.
// 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 by mělo být považováno za citlivé: vložená MAC adresa a přesné časové razítko mohou identifikovat jak generující stroj, tak čas generování.
Dekódování časových razítek UUID v7
UUID v7 obsahuje 48bitové Unix millisekudové časové razítko v prvních 48 bitech (první skupina + první 4 číslice druhé skupiny). Tento nástroj tyto bity čte a převádí na datum UTC s přesností na milisekundy.
// 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)
Na rozdíl od UUID v1 používá časové razítko UUID v7 známou Unix epochu (1. ledna 1970) a nevkládá žádné informace o hostiteli. Zbývajících 74 bitů je náhodných.
Jak tento nástroj detekuje verzi a variantu UUID
Dekodér čte pozici 14 (nibble verze) a pozici 19 (nibble varianty) kanonického řetězce UUID. Není potřeba žádný externí stav nebo kontext — všechny informace jsou obsaženy v řetězci UUID.
// 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'
}Speciální UUID
Nil UUID
Nil UUID 00000000-0000-0000-0000-000000000000 je samé nuly. Je definováno RFC 4122 jako sentinelová hodnota znamenající 'žádné UUID' — analogicky k null. Není to platné vygenerované UUID.
Max UUID
Max UUID ffffffff-ffff-ffff-ffff-ffffffffffff je samé jedničky (0xFF v každém bajtu). Definováno v RFC 9562, je to doplněk nil UUID a slouží jako maximální sentinelová hodnota.