UUID Decoder

Decode and inspect UUID structure, version, and embedded data

Zkusit příklad

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:

Formát
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)8 hexadecimálních číslic — 32 bitů
xxxx (4)4 hexadecimální číslice — 16 bitů
Mxxx (4)4 hexadecimální číslice — 16 bitů. První číslice M kóduje verzi UUID (1–8).
Nxxx (4)4 hexadecimální číslice — 16 bitů. První číslice N kóduje variantu UUID (RFC 4122, NCS, Microsoft nebo rezervováno).
xxxxxxxxxxxx (12)12 hexadecimálních číslic — 48 bitů

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.

JavaScript
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é bityRozsah první hexadecimální čísliceVariantaPopis
0xxx xxxx0x00–0x7FZpětná kompatibilita NCSStarší UUID Network Computing System (NCS). Rezervováno pro zpětnou kompatibilitu.
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562Standardní varianta UUID RFC 4122 / RFC 9562. Používána všemi moderními verzemi UUID (v1–v8).
110x xxxx0xC0–0xDFZpětná kompatibilita MicrosoftStarší Microsoft COM/DCOM GUIDs s jiným pořadím bajtů. Stále se vyskytuje v komponentách Windows COM.
111x xxxx0xE0–0xFFRezervovánoRezervová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:

VerzeNázevStandardPopis
v1Na základě časuRFC 4122Časové razítko (gregoriánská epocha, přesnost 100ns) + MAC adresa. Sekvenční na hostitele, ale prozrazuje identitu hostitele.
v2DCE SecurityRFC 4122Založeno na UUID v1 s polem time_low nahrazeným POSIX UID/GID. Zřídka používáno mimo starší systémy DCE/RPC.
v3Na základě názvu MD5RFC 4122Deterministické: MD5 hash UUID jmenného prostoru + řetězce názvů. Stejné vstupy vždy dávají stejné UUID. Preferujte v5.
v4NáhodnéRFC 4122122 bitů kryptograficky bezpečné náhodnosti. Nejběžnější verze UUID pro obecné účely.
v5Na základě názvu SHA-1RFC 4122Jako 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ů.
v6Přeuspořádaný časRFC 9562Přeuspořádá pole časového razítka UUID v1, takže UUID je chronologicky seřaditelné. Definováno v RFC 9562.
v7Unix časRFC 956248bitové 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.
v8VlastníRFC 9562Volná 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.

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:Pole sekvence hodin (14 bitů) zabraňuje duplikátům, když se hodiny pohybují zpět. Pole uzlu (48 bitů) je typicky MAC adresa generujícího hostitele.

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.

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)

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.

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'
}

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.

Časté dotazy

Jak zjistím, která verze UUID je?
Podívejte se na pozici 14 v kanonickém řetězci UUID (první znak třetí skupiny oddělené pomlčkou). Tato jediná hexadecimální číslice je číslo verze: 1, 2, 3, 4, 5, 6, 7 nebo 8. Vložte UUID do tohoto nástroje a dekóduje za vás verzi.
Mohu dekódovat UUID pro obnovení původních dat?
Závisí to na verzi. UUID v1 a v7 obsahují časové razítko, které lze plně obnovit. UUID v1 také obsahuje MAC adresu. UUID v3 a v5 jsou jednosměrné hashe — nemůžete z UUID obnovit původní název. UUID v4 je čistě náhodné — není co obnovovat.
Co znamená 'varianta' v UUID?
Pole varianty identifikuje rozvržení bajtů a konvenci interpretace UUID. Téměř všechna UUID, se kterými se setkáte, budou mít variantu RFC 4122 (vysoké bity 10), kódovanou jako hexadecimální číslice 8, 9, a nebo b na pozici 19. Jiné varianty (NCS, Microsoft) jsou starší formáty z 90. let.
Proč některá UUID vypadají jinak než jiná?
Vizuální rozdíl je v nibble verze (pozice 14) a nibble varianty (pozice 19). Například UUID v4 má vždy 4 na pozici 14, zatímco UUID v7 má vždy 7. V rámci těchto omezení jsou zbývající číslice náhodné nebo odvozené od časového razítka v závislosti na verzi.
Je nil UUID totéž jako prázdné UUID?
Konceptuálně ano — nil UUID (samé nuly) je používáno pro reprezentaci absence UUID, podobně jako null. Není to náhodně vygenerované UUID a nemělo by být uloženo jako skutečný identifikátor. Některé systémy ho používají jako výchozí nebo zástupnou hodnotu.
Může být UUID neplatné?
UUID může být syntakticky platné (správný formát), ale sémanticky neobvyklé — například mít nibble verze 0 nebo variantu 11x (rezervováno). Nil UUID a max UUID jsou syntakticky platné, ale jsou sentinelovými hodnotami. Tento nástroj zobrazí jakékoliv nibble verze a varianty, které jsou přítomny, a označí nerozpoznané verze.
Jaký je rozdíl mezi UUID a GUID?
GUID (Globally Unique Identifier) je Microsoftův název pro stejný koncept. GUIDs sledují stejný 128bitový formát RFC 4122. Jediný praktický rozdíl je, že starší Microsoft GUIDs mohou používat variantu Microsoft (vysoké bity 110) spíše než variantu RFC 4122 — to ovlivňuje pořadí bajtů v binární reprezentaci. Textová reprezentace je identická.