مُفكِّك UUID

يفك تشفير ويفحص بنية UUID وإصداره والبيانات المضمنة

جرب مثالاً

إدخال UUID

الصق UUID أعلاه لفحصه

بنية UUID

UUID (المعرّف الفريد العالمي) قيمة 128 بت تُمثَّل كـ 32 رقماً سداسياً مقسَّمة على خمس مجموعات بواصلات:

التنسيق
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)8 أرقام سداسية — 32 بت
xxxx (4)4 أرقام سداسية — 16 بت
Mxxx (4)4 أرقام سداسية — 16 بت. الرقم الأول M يرمّز إصدار UUID (1-8).
Nxxx (4)4 أرقام سداسية — 16 بت. الرقم الأول N يرمّز متغيّر UUID (RFC 4122 أو NCS أو Microsoft أو محجوز).
xxxxxxxxxxxx (12)12 رقماً سداسياً — 48 بت

الإصدار والمتغيّر هما الحقلان الوحيدان المضمونان في كل UUID. تعتمد جميع الحقول الأخرى على الإصدار.

حقل الإصدار

نيبل الإصدار هو أول رقم سداسي في المجموعة الثالثة (الموضع 14 في السلسلة الكاملة). يحدّد إصدار UUID المستخدَم لتوليد المعرّف.

JavaScript
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.

البتات العليانطاق أول رقم سداسيالمتغيّرالوصف
0xxx xxxx0x00–0x7Fتوافق NCS للخلفUUID قديمة لنظام الحوسبة الشبكية (NCS). محجوزة للتوافق للخلف.
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562متغيّر UUID القياسي RFC 4122 / RFC 9562. مستخدَم من جميع إصدارات UUID الحديثة (v1-v8).
110x xxxx0xC0–0xDFتوافق Microsoft للخلفGUIDs قديمة من Microsoft COM/DCOM بترتيب بايتات مختلف. لا تزال تُصادَف في مكوّنات Windows COM.
111x xxxx0xE0–0xFFمحجوزمحجوز للتعريف المستقبلي. لا يستخدمه أي إصدار UUID حالي.

في الممارسة العملية، تستخدم جميع UUIDs التي تصادفها تقريباً متغير RFC 4122 / RFC 9562 (نمط البتات 10xx xxxx، البايت الأول من المجموعة الرابعة في النطاق 0x80–0xBF). متغيرات NCS وMicrosoft COM والمحجوزة هي صيغ قديمة نادراً ما تُرى في الأنظمة الحديثة.

مرجع إصدارات UUID

عرَّف RFC 4122 الإصدارات 1-5. أضاف RFC 9562 (2024) الإصدارات 6 و7 و8:

الإصدارالاسمالمعيارالوصف
v1مبني على الوقتRFC 4122طابع زمني (حقبة غريغورية، دقة 100 نانوثانية) + عنوان MAC. تسلسلي لكل مضيف لكن يكشف هويته.
v2DCE SecurityRFC 4122مبني على UUID v1 مع استبدال حقل time_low بـ POSIX UID/GID. نادراً ما يُستخدَم خارج أنظمة DCE/RPC القديمة.
v3MD5 المبني على الأسماءRFC 4122حتمي: تجزيء MD5 لـ UUID فضاء أسماء + سلسلة اسم. نفس المدخلات تنتج دائماً نفس UUID. يُفضَّل v5.
v4عشوائيRFC 4122122 بتاً من العشوائية الآمنة تشفيرياً. إصدار UUID الأكثر شيوعاً للأغراض العامة.
v5SHA-1 المبني على الأسماءRFC 4122مثل v3 لكن يستخدم SHA-1. أكثر مقاومةً للتصادم من MD5. يُفضَّل على v3 للـ UUID المبنية على الأسماء الجديدة.
v6وقت معاد ترتيبهRFC 9562يعيد ترتيب حقول طابع UUID v1 الزمني لجعل UUID قابلاً للترتيب زمنياً. معرَّف في RFC 9562.
v7وقت UnixRFC 9562طابع زمني Unix بالمللي ثانية 48 بت في البتات العليا + بيانات عشوائية. قابل للترتيب وملائم لفهارس B-tree. يُفضَّل للمعرّفات المرتّبة زمنياً الجديدة.
v8مخصَّصRFC 9562حر الشكل: جميع البتات باستثناء الإصدار والمتغيّر محدَّدة من قِبَل التطبيق. لا خوارزمية توليد محدَّدة.

فكّ ترميز طوابع UUID v1 الزمنية

يضمّ UUID v1 طابعاً زمنياً غريغورياً 60 بت (فترات 100 نانوثانية منذ 15 أكتوبر 1582) مبعثراً عبر ثلاثة حقول: time_low (البتات 0-31) وtime_mid (البتات 32-47) وtime_hi (البتات 48-59). تعيد هذه الأداة تجميعها وتحويلها إلى تاريخ 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:حقل تسلسل الساعة (14 بتاً) يمنع التكرارات حين تتراجع الساعة. حقل العقدة (48 بتاً) عادةً عنوان MAC للمضيف المولِّد.

ينبغي التعامل مع UUID v1 كمعلومات حساسة: يستطيع عنوان MAC المضمَّن والطابع الزمني الدقيق تحديد كل من الجهاز المولِّد ووقت التوليد.

فكّ ترميز طوابع UUID v7 الزمنية

يضمّ UUID v7 طابعاً زمنياً Unix بالمللي ثانية 48 بت في أول 48 بتاً (المجموعة الأولى + أول 4 أرقام من المجموعة الثانية). تقرأ هذه الأداة تلك البتات وتحوّلها إلى تاريخ UTC بدقة المللي ثانية.

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، يستخدم طابع UUID v7 الزمني حقبة Unix المألوفة (1 يناير 1970) ولا يضمّ أي معلومات مضيف. الـ 74 بتاً المتبقية عشوائية.

كيف تكشف هذه الأداة إصدار UUID ومتغيّره

يقرأ المفكّك الموضع 14 (نيبل الإصدار) والموضع 19 (نيبل المتغيّر) من سلسلة UUID القانونية. لا حاجة لحالة خارجية أو سياق — جميع المعلومات موجودة في سلسلة 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'
}

UUID الخاصة

UUID الصفري

UUID الصفري 00000000-0000-0000-0000-000000000000 جميع بتاته أصفار. معرَّف في RFC 4122 كقيمة حارسة تعني 'لا UUID' — مماثل للـ null. إنه ليس UUID مولَّداً صالحاً.

UUID الأقصى

UUID الأقصى ffffffff-ffff-ffff-ffff-ffffffffffff جميع بتاته واحدات (0xFF في كل بايت). معرَّف في RFC 9562، وهو مكمّل UUID الصفري ويعمل كقيمة حارسة قصوى.

الأسئلة الشائعة

كيف أعرف أي إصدار UUID هذا؟
انظر إلى الموضع 14 في سلسلة UUID القانونية (أول حرف من المجموعة الثالثة المفصولة بواصلات). ذلك الرقم السداسي الواحد هو رقم الإصدار: 1 أو 2 أو 3 أو 4 أو 5 أو 6 أو 7 أو 8. الصق UUID في هذه الأداة وستفكّ ترميز الإصدار لك.
هل يمكنني فكّ ترميز UUID لاسترداد البيانات الأصلية؟
يتوقف على الإصدار. UUID v1 وv7 يضمّان طابعاً زمنياً يمكن استرداده كلياً. UUID v1 يضمّ أيضاً عنوان MAC. UUID v3 وv5 تجزيئات أحادية الاتجاه — لا يمكن استرداد الاسم الأصلي من UUID. UUID v4 عشوائي بالكامل — لا شيء لاسترداده.
ماذا يعني 'المتغيّر' في UUID؟
حقل المتغيّر يحدّد اصطلاحات تخطيط البايت وتفسيره للـ UUID. غالبية UUID التي ستصادفها ستمتلك متغيّر RFC 4122 (البتات العليا 10)، مرمَّزاً كأرقام سداسية 8 أو 9 أو a أو b في الموضع 19. المتغيّرات الأخرى (NCS وMicrosoft) تنسيقات قديمة من التسعينيات.
لماذا تبدو بعض UUID مختلفة عن غيرها؟
الفرق البصري في نيبل الإصدار (الموضع 14) ونيبل المتغيّر (الموضع 19). مثلاً، UUID v4 لديه دائماً 4 في الموضع 14، بينما UUID v7 لديه دائماً 7. ضمن تلك القيود، الأرقام المتبقية عشوائية أو مشتقة من الطابع الزمني حسب الإصدار.
هل UUID الصفري مماثل لـ UUID الفارغ؟
مفهومياً نعم — يُستخدَم UUID الصفري (جميع الأصفار) لتمثيل غياب UUID، مماثلاً للـ null. إنه ليس UUID مولَّداً عشوائياً ولا ينبغي تخزينه كمعرّف حقيقي. تستخدمه بعض الأنظمة كقيمة افتراضية أو عنصر نائب.
هل يمكن أن يكون UUID غير صالح؟
يمكن أن يكون UUID صالحاً تركيبياً (تنسيق صحيح) لكن غير معتاد دلالياً — مثلاً نيبل إصدار 0 أو متغيّر 11x (محجوز). UUID الصفري والأقصى صالحان تركيبياً لكنهما قيم حارسة. ستعرض هذه الأداة أي نيبلات إصدار ومتغيّر موجودة وتُعلم بالإصدارات غير المعروفة.
ما الفرق بين UUID وGUID؟
GUID (المعرّف الفريد العالمي) هو اسم Microsoft للمفهوم ذاته. GUIDs تتّبع نفس تنسيق RFC 4122 البالغ 128 بت. الفرق العملي الوحيد هو أن GUIDs القديمة من Microsoft قد تستخدم متغيّر Microsoft (البتات العليا 110) بدلاً من متغيّر RFC 4122 — هذا يؤثر على ترتيب البايتات في التمثيل الثنائي. التمثيل النصي مطابق.