UUID Decoder

Mendekode dan memeriksa struktur, versi, dan data yang tertanam dalam UUID

Coba contoh

Input UUID

Tempel UUID di atas untuk memeriksanya

Struktur UUID

UUID (Universally Unique Identifier) adalah nilai 128-bit yang direpresentasikan sebagai 32 digit heksadesimal yang dibagi menjadi lima grup oleh tanda hubung:

Format
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)8 digit hex โ€” 32 bit
xxxx (4)4 digit hex โ€” 16 bit
Mxxx (4)4 digit hex โ€” 16 bit. Digit pertama M mengkodekan versi UUID (1โ€“8).
Nxxx (4)4 digit hex โ€” 16 bit. Digit pertama N mengkodekan varian UUID (RFC 4122, NCS, Microsoft, atau cadangan).
xxxxxxxxxxxx (12)12 digit hex โ€” 48 bit

Versi dan varian adalah dua field yang dijamin ada di setiap UUID.

Field Versi

Nibble versi adalah digit hex pertama dari grup ketiga (posisi 14 dalam string lengkap).

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

Versi 7 (UUID v7) adalah versi terbaru yang banyak digunakan, diperkenalkan dalam RFC 9562 (2024).

Field Varian

Varian dikodekan dalam bit tinggi dari byte pertama grup keempat.

Bit tinggiKisaran digit hex pertamaVarianDeskripsi
0xxx xxxx0x00โ€“0x7FKompatibilitas mundur NCSUUID NCS (Network Computing System) warisan. Dicadangkan untuk kompatibilitas mundur.
10xx xxxx0x80โ€“0xBFRFC 4122 / RFC 9562Varian UUID RFC 4122 / RFC 9562 standar. Digunakan oleh semua versi UUID modern (v1โ€“v8).
110x xxxx0xC0โ€“0xDFKompatibilitas mundur MicrosoftGUID Microsoft COM/DCOM warisan dengan pengurutan byte yang berbeda. Masih ditemui di komponen Windows COM.
111x xxxx0xE0โ€“0xFFDicadangkanDicadangkan untuk definisi masa depan. Tidak digunakan oleh versi UUID saat ini.

Dalam praktiknya, hampir semua UUID yang Anda temui menggunakan varian RFC 4122 / RFC 9562 (pola bit 10xx xxxx, byte pertama grup keempat dalam rentang 0x80โ€“0xBF). Varian NCS, Microsoft COM, dan Reserved adalah format lama yang jarang terlihat di sistem modern.

Referensi Versi UUID

RFC 4122 mendefinisikan versi 1โ€“5. RFC 9562 (2024) menambahkan versi 6, 7, dan 8:

VersiNamaStandarDeskripsi
v1Berbasis waktuRFC 4122Timestamp (epoch Gregorian, presisi 100ns) + alamat MAC. Berurutan per host tetapi membocorkan identitas host.
v2DCE SecurityRFC 4122Berdasarkan UUID v1 dengan field time_low digantikan oleh POSIX UID/GID. Jarang digunakan di luar sistem DCE/RPC warisan.
v3Berbasis nama MD5RFC 4122Deterministik: hash MD5 dari UUID namespace + string nama. Input yang sama selalu menghasilkan UUID yang sama. Lebih pilih v5.
v4AcakRFC 4122122 bit keacakan yang aman secara kriptografi. Versi UUID paling umum untuk tujuan umum.
v5Berbasis nama SHA-1RFC 4122Seperti v3 tetapi menggunakan SHA-1. Lebih tahan tabrakan dari MD5. Lebih disukai daripada v3 untuk UUID berbasis nama baru.
v6Waktu yang Disusun UlangRFC 9562Menyusun ulang field timestamp UUID v1 sehingga UUID dapat diurutkan secara kronologis. Didefinisikan dalam RFC 9562.
v7Waktu UnixRFC 9562Timestamp Unix milidetik 48-bit di bit tinggi + data acak. Dapat diurutkan dan ramah indeks B-tree. Lebih disukai untuk ID berurutan waktu baru.
v8KustomRFC 9562Bentuk bebas: semua bit kecuali versi dan varian ditentukan oleh aplikasi. Tidak ada algoritme pembuatan yang ditentukan.

Mendekode Timestamp UUID v1

UUID v1 menyematkan timestamp Gregorian 60-bit (interval 100 nanodetik sejak 15 Oktober 1582) yang tersebar di tiga field.

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:Field urutan jam (14 bit) mencegah duplikat saat jam mundur. Field node (48 bit) biasanya adalah alamat MAC host yang menghasilkan.

UUID v1 harus diperlakukan sebagai sensitif: alamat MAC tertanam dan timestamp tepat dapat mengidentifikasi mesin penghasil dan waktu pembuatan.

Mendekode Timestamp UUID v7

UUID v7 menyematkan timestamp Unix milidetik 48-bit di 48 bit pertama (grup pertama + 4 digit pertama grup kedua).

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)

Tidak seperti UUID v1, timestamp UUID v7 menggunakan epoch Unix yang familier (1 Januari 1970) dan tidak menyematkan informasi host apa pun.

Cara Alat Ini Mendeteksi Versi dan Varian UUID

Decoder membaca posisi 14 (nibble versi) dan posisi 19 (nibble varian) dari string UUID kanonik.

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

UUID Khusus

Nil UUID

Nil UUID 00000000-0000-0000-0000-000000000000 semuanya nol. Didefinisikan oleh RFC 4122 sebagai nilai sentinel yang berarti 'tidak ada UUID' โ€” analogis dengan null.

Max UUID

Max UUID ffffffff-ffff-ffff-ffff-ffffffffffff semuanya satu (0xFF di setiap byte). Didefinisikan dalam RFC 9562.

Pertanyaan yang Sering Diajukan

Bagaimana cara mengetahui versi UUID mana?
Lihat posisi 14 dalam string UUID kanonik (karakter pertama dari grup ketiga yang dipisahkan tanda hubung). Digit hex tunggal itu adalah nomor versi.
Bisakah saya mendekode UUID untuk mendapatkan kembali data aslinya?
Tergantung versinya. UUID v1 dan v7 menyematkan timestamp yang dapat sepenuhnya dipulihkan. UUID v3 dan v5 adalah hash satu arah.
Apa arti 'varian' dalam UUID?
Field varian mengidentifikasi konvensi tata letak byte dan interpretasi UUID.
Mengapa beberapa UUID terlihat berbeda dari yang lain?
Perbedaan visual ada pada nibble versi (posisi 14) dan nibble varian (posisi 19).
Apakah nil UUID sama dengan UUID kosong?
Secara konseptual ya โ€” nil UUID (semua nol) digunakan untuk mewakili ketiadaan UUID, mirip dengan null.
Bisakah UUID tidak valid?
UUID dapat valid secara sintaksis (format yang benar) tetapi tidak biasa secara semantis.
Apa perbedaan antara UUID dan GUID?
GUID adalah nama Microsoft untuk konsep yang sama. GUID mengikuti format 128-bit RFC 4122 yang sama.