🔑 مولد UUID
توليد معرفات فريدة (UUIDs/GUIDs) فوراً
ما هو الـ UUID؟
الـ UUID (المعرف الفريد عالمياً، Universally Unique Identifier) هو رقم بحجم 128 بت، تم توحيده أول مرة بموجب معيار RFC 4122 الصادر عام 2005، ثم جاء معيار RFC 9562 في عام 2024 ليوسّع النطاق ويضيف رسمياً الإصدارات v6 وv7 وv8. الهدف من UUID هو توليد معرف فريد دون الحاجة إلى أي سلطة تسجيل مركزية أو تنسيق مسبق بين الأنظمة.
يُكتب الـ UUID عادة كسلسلة من 32 رقماً ست عشرياً (hex) مقسّمة إلى خمس مجموعات مفصولة بشرطات بالنمط 8-4-4-4-12، أي 36 حرفاً بالإجمالي مع احتساب الشرطات الأربع. المثال الكلاسيكي هو 550e8400-e29b-41d4-a716-446655440000، وهو النمط ذاته الذي تعرضه هذه الأداة في وضع Standard.
من الناحية الرياضية يوفر 128 بت مساحة قدرها 2128 قيمة ممكنة (نحو 3.4 × 1038)، لكن الإصدار الرابع (v4) يُثبّت 6 بتات لتحديد الإصدار والمتغيّر (4 بتات لرقم الإصدار 0100، وبتان للمتغيّر 10)، فيتبقى 122 بتاً عشوائياً فعلياً، أي نحو 5.3 × 1036 قيمة ممكنة. لتوضيح حجم هذا الرقم عملياً: لو قام نظام بتوليد مليار UUID من الإصدار v4 كل ثانية، ولمدة 100 سنة متواصلة، فسينتج نحو 3.1 × 1018 معرف فقط، وهو رقم ضئيل جداً مقارنة بـ 5.3 × 1036، بحيث يبقى احتمال حدوث تصادم واحد فقط بين كل هذه المعرفات شبه معدوم من الناحية العملية.
مصطلح GUID (Globally Unique Identifier) هو التسمية التي تستخدمها شركة Microsoft لنفس المعيار، ويظهر في سجل Windows (registry) وفي تقنيات COM/DCOM، وفي بنية Guid الخاصة بـ .NET، وفي نوع البيانات uniqueidentifier في SQL Server. من الناحية التقنية، UUID وGUID متطابقان تماماً في البنية الثنائية والتنسيق النصي، والفرق الوحيد عملياً هو أن اصطلاح الأقواس المزخرفة {xxxxxxxx-...} هو تحديداً تقليد خاص بـ Microsoft و.NET، ولهذا توفر هذه الأداة خيار تنسيق Braces بشكل منفصل.
الميزة العملية الأهم لـ UUID هي أن أي جهاز أو خدمة أو متصفح يمكنه توليد معرف فريد بمفرده تماماً، دون الاتصال بخادم مركزي أو قفل قاعدة بيانات أو التحقق مسبقاً من عدم وجود تكرار. هذا يجعله مثالياً للأنظمة الموزعة، والتطبيقات التي تعمل دون اتصال (offline)، والسيناريوهات التي تحتاج فيها عدة عقد (nodes) إلى توليد معرفات بشكل مستقل ثم دمج بياناتها لاحقاً دون تعارض.
يوجد دعم أصلي لنوع UUID في أنظمة إدارة قواعد بيانات عديدة، فمثلاً يوفر PostgreSQL نوع بيانات UUID مخصصاً يُخزَّن بكفاءة كـ 16 بايت خام بدلاً من نص كامل، بينما تتعامل أنظمة أخرى مثل MySQL مع UUID كنص من نوع CHAR(36) أو كقيمة ثنائية BINARY(16) لتوفير المساحة وتسريع الفهرسة. هذا الدعم المباشر يجعل من السهل استخدام UUID كمفتاح أساسي أو كحقل فهرسة في طبقة قاعدة البيانات دون الحاجة إلى تحويلات إضافية في كود التطبيق، سواء كان مكتوباً بـ JavaScript أو أي لغة برمجة أخرى.
إصدارات UUID
| الإصدار | الاسم | الوصف |
|---|---|---|
| v1 | الطابع الزمني | طابع زمني + عنوان MAC، قابل للترتيب لكن قد يكشف هوية الجهاز |
| v3 | هاش MD5 | اسم + فضاء أسماء عبر MD5، معرف حتمي (deterministic) |
| v4 | عشوائي | يتم توليده عشوائياً بالكامل (تستخدم هذه الأداة v4) |
| v5 | هاش SHA-1 | اسم + فضاء أسماء عبر SHA-1، أكثر مقاومة للتصادم من v3 |
| v7 | طابع Unix الزمني | طابع Unix بالمللي ثانية + بتات عشوائية، مرتب زمنياً |
تقوم هذه الأداة بتوليد الإصدار الرابع (v4) العشوائي من UUID حصرياً، باستخدام واجهة crypto.getRandomValues في المتصفح، وهي مولّد أرقام عشوائية آمن تشفيرياً (CSPRNG) يُغذّى من مصادر إنتروبيا نظام التشغيل، على عكس Math.random() التي لا تُعتبر آمنة تشفيرياً ويمكن التنبؤ بمخرجاتها في بعض الحالات. الجدول أعلاه يعرض خارطة إصدارات UUID الأخرى للمقارنة فقط، وليس كقائمة بما تولّده هذه الأداة: الإصدار v1 يعتمد على الطابع الزمني وعنوان MAC مما قد يكشف هوية الجهاز المُصدر، وv3 وv5 معرفات حتمية (deterministic) تُشتق من فضاء أسماء ونص مُدخل عبر MD5 أو SHA-1 على التوالي، بينما v7 إصدار أحدث أضافه معيار RFC 9562 عام 2024 ويجمع بين طابع زمني بدقة المللي ثانية وبتات عشوائية، مما يجعله مرتباً زمنياً تقريباً ومفضلاً كمفتاح أساسي في قواعد البيانات، لأن الفهارس الشجرية (B-tree) تتعامل بكفاءة أفضل مع معرفات شبه متسلسلة مقارنة بالعشوائية الكاملة لـ v4 عند حجم بيانات كبير.
حالات الاستخدام الشائعة
🗄️ المفاتيح الأساسية لقواعد البيانات
استخدام UUID كمفتاح أساسي بدلاً من عدد صحيح تلقائي التزايد (auto-increment integer) يمنع تسرّب معلومات عن حجم الأعمال، مثل عدد الطلبات أو المستخدمين المسجلين، والتي يسهل استنتاجها من رقم تسلسلي بسيط. كما يتيح للعميل (client) توليد المعرف بنفسه قبل عملية الإدخال في قاعدة البيانات، بدلاً من الانتظار حتى يرد الخادم بالمعرف الجديد. هذا مفيد جداً في تبسيط دمج البيانات بين قواعد بيانات مجزأة (sharded) أو نسخ مُكررة (replicas)، أو في سيناريوهات المزامنة دون اتصال (offline sync) حيث تُولَّد السجلات محلياً ثم تُدمج لاحقاً دون تعارض في المعرفات.
🔌 معرفات واجهة البرمجة APIs
في نقاط نهاية REST APIs مثل /users/{uuid} بدلاً من /users/482، يمنع استخدام UUID هجمات تعداد الموارد (enumeration attacks) التي يمكن فيها لمهاجم تخمين معرفات مستخدمين أو سجلات أخرى بمجرد تجربة أرقام متتالية. تُستخدم رموز UUID أيضاً على نطاق واسع كرموز جلسات (session tokens) ومفاتيح idempotency، وهي آلية تعتمدها واجهات برمجة مثل Stripe لضمان عدم تنفيذ نفس العملية المالية مرتين عن طريق الخطأ عند إعادة إرسال الطلب.
📁 تسمية الملفات
عند رفع الملفات أو إنشاء ملفات مؤقتة أو مدخلات تخزين مؤقت (cache)، يوفر توليد اسم فريد بصيغة UUID لكل ملف طريقة سريعة لتجنب تصادم الأسماء دون الحاجة إلى التحقق مسبقاً من وجود اسم مطابق في النظام. على سبيل المثال، يمكن حفظ صورة مرفوعة باسم مشتق من UUID مثل 3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg بدلاً من الاعتماد على اسم الملف الأصلي الذي قد يتكرر بين عدة مستخدمين مختلفين. هذا مهم بشكل خاص في بيئات الكتابة المتزامنة (concurrent writes)، حيث قد تحاول عدة عمليات إنشاء ملفات في نفس اللحظة، مما يجعل الاعتماد على عدّاد تسلسلي بسيط عرضة لتضارب الأسماء أو الكتابة فوق ملفات موجودة.
🔗 الأنظمة الموزعة
في الأنظمة الموزعة، يمكن لكل خادم أو خدمة مصغّرة (microservice) توليد معرفات UUID الخاصة بها بشكل مستقل تماماً، دون الحاجة إلى عدّاد مركزي أو آلية قفل (lock) للتنسيق بين العقد. هذا يجعلها مناسبة تماماً لمعرفات الارتباط (correlation IDs) في أنظمة تتبع الأحداث (event sourcing)، ولمعرفات الرسائل في طوابير المراسلة (message queues)، حيث يحتاج كل مكوّن في النظام إلى وسم عملياته بمعرف فريد دون انتظار رد من أي جهة مركزية.
الأسئلة الشائعة
550e8400-e29b-41d4-a716-446655440000. يُستخدم على نطاق واسع في قواعد البيانات وواجهات برمجة التطبيقات (APIs) والأنظمة الموزعة، لأنه يمكن توليده محلياً دون تنسيق مع أي جهة مركزية.Guid في .NET ونوع البيانات uniqueidentifier في SQL Server. البنية والتنسيق النصي متطابقان تماماً بين الاثنين، والفرق الوحيد عملياً هو أن صيغة الأقواس المزخرفة {xxxxxxxx-...} هي تحديداً اصطلاح خاص بـ Microsoft، ولهذا توفر هذه الأداة خيار Braces كتنسيق منفصل.crypto.getRandomValues، وهو CSPRNG آمن تشفيرياً، وبعد تثبيت بتات الإصدار والمتغيّر يتبقى 122 بتاً عشوائياً فعلياً، أي نحو 5.3 × 1036 قيمة ممكنة. حتى مع توليد مليارات المعرفات يومياً لعقود طويلة، يبقى احتمال حدوث تصادم واحد فقط بين كل تلك المعرفات شبه معدوم من الناحية العملية..txt جاهز للاستخدام مباشرة في سكربتات أو بيانات اختبار. تتم عملية التوليد بالكامل داخل المتصفح دون أي طلب شبكة، لذا حتى توليد 1000 معرف يتم فوراً تقريباً بغض النظر عن سرعة اتصالك بالإنترنت.urn:uuid:... المستخدم في بعض بروتوكولات الشبكة والمعايير النصية. يمكنك التبديل بين هذه التنسيقات بنقرة واحدة قبل النسخ أو التنزيل.أدوات ذات صلة
🔒 آمن وخاص 100%
يتم توليد جميع رموز UUID محلياً في متصفحك باستخدام آلية عشوائية آمنة تشفيراً. لا يتم إرسال أي شيء إلى أي خادم أبداً.