ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID
UUID (المعرّف الفريد عالمياً) قيمة من 128 بت تُكتب على شكل 32 رقماً سداسياً عشرياً في خمس مجموعات — 8-4-4-4-12، مثل 3f2504e0-4f89-41d3-9a0c-0305e82c3301. صُمم بحيث يستطيع أي شخص توليده في أي مكان دون سجل مركزي، مع الثقة بأنه لن يتصادم مع أي معرّف آخر. ولهذا أصبحت معرّفات UUID الخيار القياسي للمفاتيح الأساسية في الأنظمة الموزعة، ومعرّفات الربط في السجلات، وأسماء الملفات، ومعرّفات الموارد في واجهات API.
يغطي هذا الدليل الصيغة، والإصدارات المهمة اليوم (v4 وv7)، ومتى تفضّل أحدهما، ومقارنة UUID بـ GUID وULID، وكيفية توليدها والتحقق منها وتخزينها.
صيغة UUID
تشترك كل معرّفات UUID في التخطيط نفسه الذي يحدده RFC 9562 (الذي حلّ محل RFC 4122 عام 2024). تبدأ المجموعة الثالثة برقم الإصدار وترمّز المجموعة الرابعة النوع (variant)؛ والباقي بيانات خاصة بكل إصدار.
xxxxxxxx-xxxx-Vxxx-Nxxx-xxxxxxxxxxxx
^ ^
version ─┘ └─ variant (8, 9, a or b for RFC UUIDs)
3f2504e0-4f89-41d3-9a0c-0305e82c3301 ← version 4 (random)
018f4a2c-9b3e-7d21-8c4f-1e2d3a4b5c6d ← version 7 (time-ordered)إصدارات UUID: v1 وv4 وv5 وv7
- v1 — طابع زمني مع عنوان MAC للجهاز. فريد وقابل للترتيب، لكنه يسرّب عنوان العتاد ووقت الإنشاء؛ ونادراً ما يُستخدم في الأنظمة الجديدة.
- v4 — 122 بت عشوائياً. الإصدار الأكثر شيوعاً: لا تنسيق، ولا تسريب، وبساطة تامة. نقطة ضعفه الوحيدة أن المفاتيح العشوائية تبعثر عمليات الإدراج عبر فهرس قاعدة البيانات.
- v3 وv5 — مشتقان من تجزئة مساحة أسماء واسم (MD5 لـ v3 وSHA-1 لـ v5). المدخل نفسه ينتج دائماً UUID نفسه، وهو مفيد للمعرّفات الحتمية.
- v7 — طابع Unix زمني بالمللي ثانية من 48 بت تليه بتات عشوائية. قابل للترتيب حسب وقت الإنشاء، وصديق للفهارس، ولا يمكن التنبؤ به. يوصي به RFC 9562 لمفاتيح قواعد البيانات الجديدة.
UUID v4 مقابل v7: أيهما تستخدم؟
استخدم v7 عندما يكون UUID مفتاحاً أساسياً في قاعدة بيانات أو أي شيء يُفهرس ويُستعلم عنه حسب الحداثة. ولأن قيم v7 تتزايد مع الوقت، تستقر الصفوف الجديدة في نهاية فهرس B-tree بدلاً من مواضع عشوائية، فتبقى عمليات الإدراج سريعة والصفحات صديقة للذاكرة المؤقتة في PostgreSQL وMySQL وSQL Server. كما يعني الترتيب حسب المعرّف الترتيب حسب وقت الإنشاء.
استخدم v4 عندما يجب ألا يكشف المعرّف أي شيء إطلاقاً — ولا حتى وقت إنشائه تقريباً — مثل الرموز العامة وروابط إلغاء الاشتراك وأي شيء يمكن للمهاجم تعداده. ولكل ما عدا ذلك، v7 هو الافتراضي الأكثر أماناً في 2026.
UUID مقابل GUID مقابل ULID
- GUID هو اسم مايكروسوفت للمعرّف نفسه ذي الـ 128 بت. أي GUID من .NET أو SQL Server هو UUID؛ والفروق شكلية فقط (الأقواس والأحرف الكبيرة) مع غرابة تاريخية في ترتيب البايتات في بعض واجهات Windows.
- ULID معرّف بديل من 128 بت يرمّز طابعاً زمنياً من 48 بت مع 80 بت عشوائياً في 26 حرفاً بترميز Crockford Base32 (01ARZ3NDEKTSV4RRFFQ69G5FAV). قابل للترتيب مثل v7 وأقصر في القراءة والكتابة، لكنه ليس معياراً في RFC ويحتاج إلى مكتبة في كل مكان يُستخدم فيه.
- الأعداد الصحيحة التزايدية أصغر وأسرع، لكنها تحتاج إلى تسلسل مركزي وتكشف عدد السجلات الموجودة. تستخدم أنظمة كثيرة عدداً صحيحاً داخلياً وUUID خارجياً.
هل يمكن أن يتصادم معرّفا UUID؟
يحتوي UUID v4 على 122 بت عشوائياً، أي نحو 5.3 × 10³⁶ قيمة ممكنة. ستحتاج إلى توليد نحو 2.7 × 10¹⁸ معرّف — مليارات في الثانية لمدة قرن — قبل أن يبلغ احتمال تكرار واحد 50%. عملياً تأتي التصادمات من الأخطاء البرمجية (مولّد عشوائي ببذرة ثابتة أو مطبّق بشكل رديء، أو معرّفات منسوخة ولصقت)، ولا تأتي من الصدفة أبداً.
توليد UUID والتحقق منه وتخزينه
- ولّده بالمنصة: crypto.randomUUID() في JavaScript، وuuid.uuid4() في Python، وjava.util.UUID في Java، وgen_random_uuid() في PostgreSQL. وجميعها تستخدم مصدراً عشوائياً آمناً تشفيرياً.
- تحقق من الشكل: 36 حرفاً، وأرقام سداسية عشرية، وشرطات في المواضع 8 و13 و18 و23، ورقم إصدار من 1 إلى 8، ورقم نوع 8 أو 9 أو a أو b. الأحرف الصغيرة هي الصيغة القياسية.
- خزّنه كنوع أصلي من 16 بايتاً (uuid في PostgreSQL، وBINARY(16) في MySQL، وUNIQUEIDENTIFIER في SQL Server) لا كسلسلة من 36 حرفاً — فهذا يقلّص حجم الفهرس إلى النصف.
- لا تشتق UUID من بيانات المستخدم إلا إذا كنت تقصد حتمية v5، ولا تعامل UUID v4 كسر بالعناية نفسها الممنوحة لكلمة المرور: لا يمكن تخمينه، لكنه يُطبع أيضاً في السجلات وعناوين URL.
جرّبها: مولّد UUID جرّبها: مولّد الأسرار العشوائية جرّبها: مولّد جمل SQL INSERT
الأسئلة الشائعة
كيف يبدو UUID؟
36 حرفاً: 32 رقماً سداسياً عشرياً في خمس مجموعات مفصولة بشرطات من 8 و4 و4 و4 و12 — مثل 3f2504e0-4f89-41d3-9a0c-0305e82c3301.
هل UUID هو نفسه GUID؟
نعم. GUID هو مصطلح مايكروسوفت للمعرّف نفسه ذي الـ 128 بت الذي يحدده معيار UUID. وهما قابلان للتبادل.
أي إصدار من UUID أستخدم كمفتاح أساسي في قاعدة البيانات؟
الإصدار 7. يُرتَّب حسب وقت الإنشاء، فتبقى عمليات الإدراج في نهاية الفهرس وتبقى سريعة. يعمل الإصدار 4 لكنه يجزّئ الفهارس في الجداول الكبيرة.
هل UUID حساس لحالة الأحرف؟
لا. الأرقام السداسية العشرية لها القيمة نفسها بأي حالة؛ والصيغة النصية القياسية بالأحرف الصغيرة، ومعظم قواعد البيانات توحّدها عند الإدخال.
هل من الآمن استخدام UUID كرمز لإعادة تعيين كلمة المرور؟
يحتوي UUID v4 على 122 بت من العشوائية، وهو أكثر من كافٍ، ويُولَّد من مصدر عشوائي آمن. مقبول، لكن الرمز العشوائي المخصص (بلا بتات إصدار وأطول) أنظف. لا تستخدم v1 أو v7 لهذا الغرض أبداً — فطوابعها الزمنية تجعلها قابلة للتنبؤ جزئياً.
كم طول UUID بالبايتات؟
16 بايتاً (128 بت) في الصيغة الثنائية، أو 36 بايتاً كنص مع الشرطات. خزّن الصيغة الثنائية عندما تدعمها قاعدة البيانات.
الأدوات المذكورة في هذا الدليل
توليد معرّفات UUID v4 (عشوائية) وv7 (مرتّبة زمنياً) بالجملة، والتحقق من المعرّفات الموجودة.
توليد معرّفات ULID (معرّفات قابلة للترتيب من 26 حرفاً) وفكّ ترميز طوابعها الزمنية.
توليد أسرار عشوائية آمنة تشفيرياً بصيغة سداسية عشرية أو Base64 أو Base64url.
توليد مفاتيح API عشوائية ببادئات وطول ومجموعات أحرف مخصّصة.
ولّد سلاسل نصية عشوائية بطول ومجموعات أحرف وعدد مخصصة باستخدام عشوائية آمنة.
توليد جمل INSERT من تعريف جدول أو صفوف نموذجية أو CSV أو JSON.