UUID 디코더
Decode and inspect UUID structure, version, and embedded data
UUID 입력
위에 UUID를 붙여넣어 검사하세요
UUID 구조
UUID(Universally Unique Identifier)는 하이픈으로 5개 그룹으로 나뉜 32개의 16진수 문자로 표현되는 128비트 값입니다:
버전과 변형은 모든 UUID에 존재가 보장되는 유일한 두 필드입니다. 다른 모든 필드는 버전에 따라 다릅니다.
버전 필드
버전 니블은 세 번째 그룹의 첫 번째 16진수(전체 문자열의 위치 14)입니다. 식별자를 생성하는 데 사용된 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 밀리초 타임스탬프를 인코딩합니다.
변형 필드
변형은 네 번째 그룹의 첫 번째 바이트의 상위 비트에 인코딩됩니다. UUID가 사용하는 레이아웃 및 바이트 순서 규칙을 식별합니다.
| 상위 비트 | 첫 번째 16진수 범위 | 변형 | 설명 |
|---|---|---|---|
| 0xxx xxxx | 0x00–0x7F | NCS 하위 호환성 | 레거시 네트워크 컴퓨팅 시스템(NCS) UUID. 하위 호환성을 위해 예약. |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | 표준 RFC 4122 / RFC 9562 UUID 변형. 모든 현대 UUID 버전(v1-v8)에서 사용됩니다. |
| 110x xxxx | 0xC0–0xDF | Microsoft 하위 호환성 | 다른 바이트 순서를 가진 레거시 Microsoft COM/DCOM GUID. Windows COM 구성 요소에서 여전히 볼 수 있습니다. |
| 111x xxxx | 0xE0–0xFF | 예약됨 | 미래 정의를 위해 예약됨. 현재 UUID 버전에서는 사용되지 않습니다. |
실제로 접하는 거의 모든 UUID는 RFC 4122 / RFC 9562 변형(비트 패턴 10xx xxxx, 네 번째 그룹의 첫 번째 바이트가 0x80–0xBF 범위)을 사용합니다. NCS, Microsoft COM 및 Reserved 변형은 현대 시스템에서 거의 볼 수 없는 레거시 형식입니다.
UUID 버전 참조
RFC 4122는 버전 1-5를 정의했습니다. RFC 9562(2024)는 버전 6, 7, 8을 추가했습니다:
| 버전 | 이름 | 표준 | 설명 |
|---|---|---|---|
| v1 | 시간 기반 | RFC 4122 | 타임스탬프(그레고리안 에포크, 100ns 정밀도) + MAC 주소. 호스트별 순차이지만 호스트 신원을 누출합니다. |
| v2 | DCE 보안 | RFC 4122 | UUID v1 기반, time_low 필드가 POSIX UID/GID로 대체됨. 레거시 DCE/RPC 시스템 외에서는 거의 사용되지 않습니다. |
| v3 | 이름 기반 MD5 | RFC 4122 | 결정론적: 네임스페이스 UUID + 이름 문자열의 MD5 해시. 동일한 입력은 항상 동일한 UUID를 생성합니다. v5를 선호하세요. |
| v4 | 무작위 | RFC 4122 | 암호학적으로 안전한 122비트 무작위성. 가장 일반적인 범용 UUID 버전. |
| v5 | 이름 기반 SHA-1 | RFC 4122 | v3과 유사하지만 SHA-1 사용. MD5보다 충돌 방지력이 높습니다. 새 이름 기반 UUID에 v3보다 선호됩니다. |
| v6 | 재정렬 시간 | RFC 9562 | UUID v1 타임스탬프 필드를 재정렬하여 UUID가 시간순으로 정렬 가능하게 합니다. RFC 9562에 정의됨. |
| v7 | Unix 시간 | RFC 9562 | 상위 비트에 48비트 Unix 밀리초 타임스탬프 + 무작위 데이터. 정렬 가능하고 B-tree 인덱스 친화적. 새 시간 순서 ID에 선호. |
| v8 | 사용자 정의 | RFC 9562 | 자유 형식: 버전 및 변형을 제외한 모든 비트는 애플리케이션 정의. 생성 알고리즘이 지정되지 않았습니다. |
UUID v1 타임스탬프 디코딩
UUID v1은 세 필드에 걸쳐 60비트 그레고리안 타임스탬프(1582년 10월 15일부터 100나노초 간격)를 내장합니다: time_low(비트 0-31), time_mid(비트 32-47), time_hi(비트 48-59). 이 도구는 이를 재조립하여 표준 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은 민감하게 취급해야 합니다: 내장된 MAC 주소와 정확한 타임스탬프는 생성 머신과 생성 시간 모두를 식별할 수 있습니다.
UUID v7 타임스탬프 디코딩
UUID v7은 처음 48비트(첫 번째 그룹 + 두 번째 그룹의 처음 4자리)에 48비트 Unix 밀리초 타임스탬프를 내장합니다. 이 도구는 이 비트를 읽고 밀리초 정밀도로 UTC 날짜로 변환합니다.
// 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)
UUID v1과 달리 UUID v7 타임스탬프는 친숙한 Unix 에포크(1970년 1월 1일)를 사용하며 호스트 정보를 내장하지 않습니다. 나머지 74비트는 무작위입니다.
이 도구가 UUID 버전과 변형을 감지하는 방법
디코더는 표준 UUID 문자열의 위치 14(버전 니블)와 위치 19(변형 니블)를 읽습니다. 외부 상태나 컨텍스트가 필요 없습니다——모든 정보는 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'
}특수 UUID
Nil UUID
nil UUID 00000000-0000-0000-0000-000000000000는 모두 0입니다. RFC 4122에서 'UUID 없음'을 의미하는 센티널 값으로 정의됩니다——null과 유사합니다. 유효한 생성된 UUID가 아닙니다.
Max UUID
max UUID ffffffff-ffff-ffff-ffff-ffffffffffff는 모두 1(모든 바이트에서 0xFF)입니다. RFC 9562에 정의되며 nil UUID의 보완으로 최대 센티널 값으로 사용됩니다.