مُفكِّك UUID
يفك تشفير ويفحص بنية UUID وإصداره والبيانات المضمنة
إدخال UUID
الصق UUID أعلاه لفحصه
بنية UUID
UUID (المعرّف الفريد العالمي) قيمة 128 بت تُمثَّل كـ 32 رقماً سداسياً مقسَّمة على خمس مجموعات بواصلات:
الإصدار والمتغيّر هما الحقلان الوحيدان المضمونان في كل UUID. تعتمد جميع الحقول الأخرى على الإصدار.
حقل الإصدار
نيبل الإصدار هو أول رقم سداسي في المجموعة الثالثة (الموضع 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.
| البتات العليا | نطاق أول رقم سداسي | المتغيّر | الوصف |
|---|---|---|---|
| 0xxx xxxx | 0x00–0x7F | توافق NCS للخلف | UUID قديمة لنظام الحوسبة الشبكية (NCS). محجوزة للتوافق للخلف. |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | متغيّر UUID القياسي RFC 4122 / RFC 9562. مستخدَم من جميع إصدارات UUID الحديثة (v1-v8). |
| 110x xxxx | 0xC0–0xDF | توافق Microsoft للخلف | GUIDs قديمة من Microsoft COM/DCOM بترتيب بايتات مختلف. لا تزال تُصادَف في مكوّنات Windows COM. |
| 111x xxxx | 0xE0–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. تسلسلي لكل مضيف لكن يكشف هويته. |
| v2 | DCE Security | RFC 4122 | مبني على UUID v1 مع استبدال حقل time_low بـ POSIX UID/GID. نادراً ما يُستخدَم خارج أنظمة DCE/RPC القديمة. |
| v3 | MD5 المبني على الأسماء | RFC 4122 | حتمي: تجزيء MD5 لـ UUID فضاء أسماء + سلسلة اسم. نفس المدخلات تنتج دائماً نفس UUID. يُفضَّل v5. |
| v4 | عشوائي | RFC 4122 | 122 بتاً من العشوائية الآمنة تشفيرياً. إصدار UUID الأكثر شيوعاً للأغراض العامة. |
| v5 | SHA-1 المبني على الأسماء | RFC 4122 | مثل v3 لكن يستخدم SHA-1. أكثر مقاومةً للتصادم من MD5. يُفضَّل على v3 للـ UUID المبنية على الأسماء الجديدة. |
| v6 | وقت معاد ترتيبه | RFC 9562 | يعيد ترتيب حقول طابع UUID v1 الزمني لجعل UUID قابلاً للترتيب زمنياً. معرَّف في RFC 9562. |
| v7 | وقت Unix | RFC 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 قياسي.
// 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 طابعاً زمنياً Unix بالمللي ثانية 48 بت في أول 48 بتاً (المجموعة الأولى + أول 4 أرقام من المجموعة الثانية). تقرأ هذه الأداة تلك البتات وتحوّلها إلى تاريخ 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 المألوفة (1 يناير 1970) ولا يضمّ أي معلومات مضيف. الـ 74 بتاً المتبقية عشوائية.
كيف تكشف هذه الأداة إصدار UUID ومتغيّره
يقرأ المفكّك الموضع 14 (نيبل الإصدار) والموضع 19 (نيبل المتغيّر) من سلسلة UUID القانونية. لا حاجة لحالة خارجية أو سياق — جميع المعلومات موجودة في سلسلة 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 الخاصة
UUID الصفري
UUID الصفري 00000000-0000-0000-0000-000000000000 جميع بتاته أصفار. معرَّف في RFC 4122 كقيمة حارسة تعني 'لا UUID' — مماثل للـ null. إنه ليس UUID مولَّداً صالحاً.
UUID الأقصى
UUID الأقصى ffffffff-ffff-ffff-ffff-ffffffffffff جميع بتاته واحدات (0xFF في كل بايت). معرَّف في RFC 9562، وهو مكمّل UUID الصفري ويعمل كقيمة حارسة قصوى.