UUID Çözücü

UUID yapısını, sürümünü ve gömülü verileri çözer ve inceler

Örnek dene

UUID Girişi

İncelemek için yukarıya bir UUID yapıştırın

UUID Yapısı

UUID (Evrensel Benzersiz Tanımlayıcı), tirelerle beş gruba ayrılmış 32 onaltılık basamak olarak temsil edilen 128 bitlik bir değerdir:

Biçim
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)8 onaltılık basamak — 32 bit
xxxx (4)4 onaltılık basamak — 16 bit
Mxxx (4)4 onaltılık basamak — 16 bit. İlk basamak M, UUID sürümünü (1–8) kodlar.
Nxxx (4)4 onaltılık basamak — 16 bit. İlk basamak N, UUID varyantını (RFC 4122, NCS, Microsoft veya ayrılmış) kodlar.
xxxxxxxxxxxx (12)12 onaltılık basamak — 48 bit

Sürüm ve varyant, her UUID'de bulunması garanti edilen tek iki alandır.

Sürüm Alanı

Sürüm nibble'ı, üçüncü grubun ilk onaltılık basamağıdır (tam dizide 14. konum).

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

Sürüm 7 (UUID v7), RFC 9562'de (2024) tanıtılan en yeni yaygın kullanılan sürümdür.

Varyant Alanı

Varyant, dördüncü grubun ilk baytının yüksek bitlerinde kodlanır.

Yüksek bitlerİlk onaltılık basamak aralığıVaryantAçıklama
0xxx xxxx0x00–0x7FNCS geriye dönük uyumlulukEski Ağ Hesaplama Sistemi (NCS) UUID'leri. Geriye dönük uyumluluk için ayrılmıştır.
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562Standart RFC 4122 / RFC 9562 UUID varyantı. Tüm modern UUID sürümleri (v1–v8) tarafından kullanılır.
110x xxxx0xC0–0xDFMicrosoft geriye dönük uyumlulukFarklı bayt sıralamasına sahip eski Microsoft COM/DCOM GUID'leri. Windows COM bileşenlerinde hâlâ karşılaşılır.
111x xxxx0xE0–0xFFAyrılmışGelecekteki tanım için ayrılmıştır. Herhangi bir mevcut UUID sürümü tarafından kullanılmaz.

Pratikte, karşılaştığınız neredeyse tüm UUID'ler RFC 4122 / RFC 9562 varyantını kullanır (10xx xxxx bit deseni, dördüncü grubun ilk baytı 0x80–0xBF aralığında). NCS, Microsoft COM ve Reserved varyantları, modern sistemlerde nadiren görülen eski formatlardır.

UUID Sürümleri Referansı

RFC 4122, 1–5 arası sürümleri tanımladı. RFC 9562 (2024), 6, 7 ve 8. sürümleri ekledi:

SürümAdStandartAçıklama
v1Zaman tabanlıRFC 4122Zaman damgası (Gregoryen dönemi, 100 ns hassasiyet) + MAC adresi. Ana bilgisayar başına sıralı ancak ana bilgisayar kimliğini sızdırır.
v2DCE SecurityRFC 4122time_low alanı POSIX UID/GID ile değiştirilmiş UUID v1 tabanlı. Eski DCE/RPC sistemlerinin dışında nadiren kullanılır.
v3Ad tabanlı MD5RFC 4122Deterministik: ad alanı UUID + ad dizesinin MD5 karması. Aynı girdiler her zaman aynı UUID'yi verir. v5'i tercih edin.
v4RastgeleRFC 4122122 bit kriptografik açıdan güvenli rastgelelik. En yaygın genel amaçlı UUID sürümü.
v5Ad tabanlı SHA-1RFC 4122v3 gibi ama SHA-1 kullanır. MD5'ten daha fazla çakışmaya dayanıklı. Yeni ad tabanlı UUID'ler için v3'e tercih edilir.
v6Yeniden Sıralanmış ZamanRFC 9562UUID v1 zaman damgası alanlarını UUID'nin kronolojik olarak sıralanabilir olması için yeniden sıralar. RFC 9562'de tanımlandı.
v7Unix ZamanıRFC 9562Yüksek bitlere 48 bitlik Unix milisaniye zaman damgası + rastgele veri. Sıralanabilir ve B-ağacı dizini dostu. Yeni zaman sıralı ID'ler için tercih edilir.
v8ÖzelRFC 9562Serbest biçimli: sürüm ve varyant dışındaki tüm bitler uygulamaya özeldir.

UUID v1 Zaman Damgalarını Çözme

UUID v1, üç alana yayılmış bir 60 bitlik Gregoryen zaman damgası (15 Ekim 1582'den itibaren 100 nanosaniyelik aralıklar) gömer: time_low (bit 0–31), time_mid (bit 32–47) ve time_hi (bit 48–59).

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:Saat dizisi alanı (14 bit), saat geriye gittiğinde tekrarları önler. Düğüm alanı (48 bit), genellikle oluşturan ana bilgisayarın MAC adresidir.

UUID v1, hassas bilgi olarak ele alınmalıdır: gömülü MAC adresi ve kesin zaman damgası hem oluşturan makineyi hem de oluşturma zamanını tanımlayabilir.

UUID v7 Zaman Damgalarını Çözme

UUID v7, ilk 48 bite 48 bitlik Unix milisaniye zaman damgası gömer. Bu araç söz konusu bitleri okur ve milisaniye hassasiyetiyle UTC tarihine dönüştürür.

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)

UUID v1'in aksine UUID v7 zaman damgası, tanıdık Unix dönemini (1 Ocak 1970) kullanır ve herhangi bir ana bilgisayar bilgisi gömmez.

Bu Araç UUID Sürümünü ve Varyantını Nasıl Algılar

Çözücü, kanonik UUID dizesinin 14. konumunu (sürüm nibble'ı) ve 19. konumunu (varyant nibble'ı) okur.

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

Özel UUID'ler

Nil UUID

Nil UUID 00000000-0000-0000-0000-000000000000 tamamı sıfırdır. RFC 4122 tarafından 'UUID yok' anlamında sentinel değeri olarak tanımlanmıştır — null'a benzer.

Maksimum UUID

Maksimum UUID ffffffff-ffff-ffff-ffff-ffffffffffff tamamı birdir. RFC 9562'de tanımlanan bu UUID, nil UUID'nin tamamlayıcısıdır.

Sıkça Sorulan Sorular

Bir UUID'nin hangi sürüm olduğunu nasıl anlarım?
Kanonik UUID dizesinde 14. konuma bakın (tire ile ayrılmış üçüncü grubun ilk karakteri). Bu tek onaltılık basamak sürüm numarasıdır: 1, 2, 3, 4, 5, 6, 7 veya 8.
Orijinal verileri kurtarmak için bir UUID'yi çözebilir miyim?
Sürüme bağlıdır. UUID v1 ve v7, tamamen kurtarılabilen bir zaman damgası gömer. UUID v3 ve v5 tek yönlü karmalardır. UUID v4 tamamen rastgeledir.
UUID'deki 'varyant' ne anlama gelir?
Varyant alanı, UUID'nin bayt düzenini ve yorumlama kurallarını tanımlar. Karşılaşacağınız neredeyse tüm UUID'ler RFC 4122 varyantına sahip olacaktır.
Bazı UUID'ler neden diğerlerinden görsel olarak farklı görünüyor?
Görsel fark, sürüm nibble'ı (14. konum) ve varyant nibble'ındadır (19. konum). UUID v4 her zaman 14. konumda 4 bulundururken UUID v7 her zaman 7 bulundurur.
Nil UUID, boş UUID ile aynı mı?
Kavramsal olarak evet — nil UUID (tamamı sıfır), UUID'nin yokluğunu temsil etmek için null'a benzer şekilde kullanılır.
Bir UUID geçersiz olabilir mi?
Bir UUID sözdizimsel olarak geçerli (doğru biçim) ama anlamsal olarak alışılmadık olabilir — örneğin sürüm nibble'ı 0 olabilir.
UUID ile GUID arasındaki fark nedir?
GUID, aynı kavram için Microsoft'un adıdır. GUID'ler aynı RFC 4122 128 bitlik biçimi izler.