Dekoder UUID

Dekoduje i sprawdza strukturę, wersję i osadzone dane UUID

Wypróbuj przykład

Wejście UUID

Wklej UUID powyżej, aby go sprawdzić

Struktura UUID

UUID (Universally Unique Identifier) to 128-bitowa wartość reprezentowana jako 32 cyfry szesnastkowe podzielone na pięć grup przez myślniki:

Format
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)8 cyfr szesnastkowych — 32 bity
xxxx (4)4 cyfry szesnastkowe — 16 bitów
Mxxx (4)4 cyfry szesnastkowe — 16 bitów. Pierwsza cyfra M koduje wersję UUID (1–8).
Nxxx (4)4 cyfry szesnastkowe — 16 bitów. Pierwsza cyfra N koduje wariant UUID (RFC 4122, NCS, Microsoft lub zarezerwowany).
xxxxxxxxxxxx (12)12 cyfr szesnastkowych — 48 bitów

Wersja i wariant to jedyne dwa pola gwarantowane w każdym UUID. Wszystkie pozostałe pola zależą od wersji.

Pole wersji

Nibble wersji to pierwsza cyfra szesnastkowa trzeciej grupy (pozycja 14 w pełnym ciągu). Identyfikuje, która wersja UUID została użyta do wygenerowania identyfikatora.

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

Wersja 7 (UUID v7) to najnowsza szeroko używana wersja, wprowadzona w RFC 9562 (2024). Koduje uniksowy znacznik czasu w milisekundach w wysokich bitach dla sortowalności.

Pole wariantu

Wariant jest kodowany w wysokich bitach pierwszego bajtu czwartej grupy. Identyfikuje konwencje układu i kolejności bajtów używane przez UUID.

Wysokie bityZakres pierwszej cyfry szesnastkowejWariantOpis
0xxx xxxx0x00–0x7FWsteczna zgodność NCSStarsze UUID Network Computing System (NCS). Zarezerwowane dla wstecznej zgodności.
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562Standardowy wariant UUID RFC 4122 / RFC 9562. Używany przez wszystkie nowoczesne wersje UUID (v1–v8).
110x xxxx0xC0–0xDFWsteczna zgodność MicrosoftStarsze GUID Microsoft COM/DCOM z inną kolejnością bajtów. Nadal spotykane w komponentach Windows COM.
111x xxxx0xE0–0xFFZarezerwowanyZarezerwowany do przyszłej definicji. Nieużywany przez żadną bieżącą wersję UUID.

W praktyce niemal wszystkie UUID, które napotkasz, używają wariantu RFC 4122 / RFC 9562 (wzorzec bitów 10xx xxxx, pierwszy bajt czwartej grupy w zakresie 0x80–0xBF). Warianty NCS, Microsoft COM i Reserved to starsze formaty rzadko spotykane w nowoczesnych systemach.

Tabela wersji UUID

RFC 4122 zdefiniował wersje 1–5. RFC 9562 (2024) dodał wersje 6, 7 i 8:

WersjaNazwaStandardOpis
v1Oparty na czasieRFC 4122Znacznik czasu (epoka gregoriańska, precyzja 100ns) + adres MAC. Sekwencyjny na hosta, ale ujawnia tożsamość hosta.
v2DCE SecurityRFC 4122Oparty na UUID v1 z polem time_low zastąpionym POSIX UID/GID. Rzadko używany poza starszymi systemami DCE/RPC.
v3Oparty na nazwach MD5RFC 4122Deterministyczny: skrót MD5 UUID przestrzeni nazw + ciąg nazwy. Te same dane wejściowe zawsze dają ten sam UUID. Preferuj v5.
v4LosowyRFC 4122122 bity kryptograficznie bezpiecznej losowości. Najczęstsza ogólna wersja UUID.
v5Oparty na nazwach SHA-1RFC 4122Jak v3, ale używa SHA-1. Bardziej odporny na kolizje niż MD5. Preferowany nad v3 dla nowych UUID opartych na nazwach.
v6Przeorganizowany czasRFC 9562Reorganizuje pola znacznika czasu UUID v1, dzięki czemu UUID jest sortowalny chronologicznie. Zdefiniowany w RFC 9562.
v7Czas uniksowyRFC 956248-bitowy uniksowy znacznik czasu w milisekundach w wysokich bitach + losowe dane. Sortowalny i przyjazny dla indeksu B-tree. Preferowany dla nowych identyfikatorów posortowanych według czasu.
v8NiestandardowyRFC 9562Swobodna forma: wszystkie bity poza wersją i wariantem są zdefiniowane przez aplikację. Nie określono algorytmu generowania.

Dekodowanie znaczników czasu UUID v1

UUID v1 osadza 60-bitowy znacznik czasu gregoriański (interwały 100-nanosekundowe od 15 października 1582) podzielony na trzy pola: time_low (bity 0–31), time_mid (bity 32–47) i time_hi (bity 48–59). To narzędzie składa je ponownie i konwertuje do standardowej daty 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 sekwencji zegarowej (14 bitów) zapobiega duplikatom, gdy zegar cofa się. Pole węzła (48 bitów) to zazwyczaj adres MAC generującego hosta.

UUID v1 powinien być traktowany jako wrażliwy: osadzony adres MAC i precyzyjny znacznik czasu mogą zidentyfikować zarówno generującą maszynę, jak i czas generowania.

Dekodowanie znaczników czasu UUID v7

UUID v7 osadza 48-bitowy uniksowy znacznik czasu w milisekundach w pierwszych 48 bitach (pierwsza grupa + pierwsze 4 cyfry drugiej grupy). To narzędzie odczytuje te bity i konwertuje je do daty UTC z precyzją do milisekund.

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)

W przeciwieństwie do UUID v1, znacznik czasu UUID v7 używa znajomej epoki uniksowej (1 stycznia 1970) i nie osadza żadnych informacji o hoście. Pozostałe 74 bity są losowe.

Jak to narzędzie wykrywa wersję i wariant UUID

Dekoder odczytuje pozycję 14 (nibble wersji) i pozycję 19 (nibble wariantu) kanonicznego ciągu UUID. Nie jest potrzebny żaden zewnętrzny stan ani kontekst — wszystkie informacje są zawarte w ciągu 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'
}

Specjalne UUID

Nil UUID

Nil UUID 00000000-0000-0000-0000-000000000000 to same zera. Jest zdefiniowany przez RFC 4122 jako wartość wartownicza oznaczająca 'brak UUID' — analogiczna do null. Nie jest prawidłowym wygenerowanym UUID.

Max UUID

Max UUID ffffffff-ffff-ffff-ffff-ffffffffffff to same jedynki (0xFF w każdym bajcie). Zdefiniowany w RFC 9562, jest dopełnieniem nil UUID i służy jako maksymalna wartość wartownicza.

Często zadawane pytania

Jak sprawdzić, która to wersja UUID?
Spójrz na pozycję 14 w kanonicznym ciągu UUID (pierwsza cyfra trzeciej grupy oddzielonej myślnikami). Ta pojedyncza cyfra szesnastkowa to numer wersji: 1, 2, 3, 4, 5, 6, 7 lub 8. Wklej UUID do tego narzędzia, a zdekoduje wersję.
Czy mogę zdekodować UUID, aby odzyskać oryginalne dane?
Zależy od wersji. UUID v1 i v7 osadzają znacznik czasu, który można w pełni odzyskać. UUID v1 osadza również adres MAC. UUID v3 i v5 to jednokierunkowe skróty — nie można odzyskać oryginalnej nazwy z UUID. UUID v4 jest czysto losowy — nie ma nic do odzyskania.
Co oznacza 'wariant' w UUID?
Pole wariantu identyfikuje układ bajtów i konwencję interpretacji UUID. Prawie wszystkie UUID, które napotkasz, będą miały wariant RFC 4122 (wysokie bity 10), kodowany jako cyfry szesnastkowe 8, 9, a lub b na pozycji 19. Inne warianty (NCS, Microsoft) to starsze formaty z lat 90.
Dlaczego niektóre UUID wyglądają inaczej niż inne?
Wizualna różnica leży w nibble wersji (pozycja 14) i nibble wariantu (pozycja 19). Na przykład UUID v4 zawsze ma 4 na pozycji 14, podczas gdy UUID v7 zawsze ma 7. W tych ograniczeniach pozostałe cyfry są losowe lub wywodzą się ze znacznika czasu w zależności od wersji.
Czy nil UUID jest tym samym co pusty UUID?
Koncepcyjnie tak — nil UUID (same zera) jest używany do reprezentowania braku UUID, podobnie jak null. Nie jest losowo wygenerowanym UUID i nie powinien być przechowywany jako rzeczywisty identyfikator. Niektóre systemy używają go jako wartości domyślnej lub zastępczej.
Czy UUID może być nieprawidłowy?
UUID może być syntaktycznie prawidłowy (poprawny format), ale semantycznie niezwykły — na przykład mający nibble wersji 0 lub wariant 11x (zarezerwowany). Nil UUID i max UUID są syntaktycznie prawidłowe, ale są wartościami wartowniczymi. To narzędzie wyświetli nibble wersji i wariantu i oznaczy nierozpoznane wersje.
Jaka jest różnica między UUID a GUID?
GUID (Globally Unique Identifier) to nazwa Microsoftu dla tego samego pojęcia. GUID-y stosują ten sam 128-bitowy format RFC 4122. Jedyna praktyczna różnica polega na tym, że starsze GUID-y Microsoft mogą używać wariantu Microsoft (wysokie bity 110) zamiast wariantu RFC 4122 — wpływa to na kolejność bajtów w reprezentacji binarnej. Reprezentacja tekstowa jest identyczna.