UUID v4: ما هو ولماذا لا تستخدم رقمًا عشوائيًا بدلًا منه؟

دليل عملي يشرح UUID v4 وبنيته والعشوائية فيه، والفرق بينه وبين الأرقام التسلسلية والعشوائية الصغيرة، ومتى تستخدمه كمُعرّف.

استخدام UUID كمعرف فريد للسجلات والبيانات
UUID يعطي العنصر معرفًا واسع المساحة من دون الاعتماد على عداد مركزي بسيط.

لو أن لديك ثلاثة خوادم تنشئ طلبات في الوقت نفسه، كيف تعطي كل طلب معرفًا من دون أن تتزاحم كلها على الرقم التالي؟ UUID يحل هذا النوع من المشاكل بطريقة مختلفة عن 1001 و1002 و1003: المعرّف نفسه كبير جدًا، ويمكن توليده محليًا مع احتمال تصادم منخفض للغاية عندما تُطبّق الخوارزمية بصورة صحيحة.

ما هو UUID أصلًا؟

RFC 9562 يعرّف UUID كمعرف بطول 128 بت، ولا يحتاج إلى عملية تسجيل مركزية لكل معرف. كما يوضح أن المواصفة الحالية تحل محل RFC 4122 القديم، وتعرّف عدة إصدارات من UUID لأغراض مختلفة. [المصدر: IETF RFC 9562]

التمثيل النصي الشائع يبدو مثل خمس مجموعات سداسية عشرية مفصولة بشرطات. هذا الشكل ليس “رقمًا عشوائيًا طويلًا فقط”؛ بعض البتات لها معنى محدد مثل الإصدار والـvariant.

8f14e45f-ceea-4b91-9c12-4c7b7d6f8a21

الرقم 4 في موضع الإصدار يدل على UUIDv4، بينما جزء الـvariant له قواعده المحددة في المواصفة.

كيف يعمل UUID v4 ولماذا هو مختلف عن رقم عشوائي صغير؟

UUID v4 يعتمد على العشوائية

وفق RFC 9562، UUIDv4 مخصص للتوليد من أرقام عشوائية أو شبه عشوائية. يمكن للمنفذ توليد 128 بت ثم استبدال بتات الإصدار والـvariant بالقيم المطلوبة، أو توليد 122 بت عشوائية مباشرة ودمجها مع البتات الثابتة. [المصدر: RFC 9562 — UUID Version 4]

لهذا تكون مساحة القيم العشوائية الفعلية ضخمة جدًا: 122 بت متاحة للعشوائية في UUIDv4 القياسي. الفكرة ليست أن التصادم “مستحيل رياضيًا”، بل أن المساحة كبيرة بما يكفي لجعل الاصطدام غير مرجح جدًا عند استخدام مصدر عشوائي مناسب.

رقم تسلسلي

يحتاج غالبًا إلى جهة أو قاعدة بيانات تعرف “ما الرقم التالي؟” وقد يكشف ترتيب السجلات بسهولة.

UUID v4

يمكن توليده محليًا من دون سؤال عداد مركزي، ويعمل جيدًا عندما تنشئ عدة أنظمة معرفات في الوقت نفسه.

لماذا لا أستخدم رقمًا عشوائيًا صغيرًا فقط؟

يمكنك إنشاء رقم عشوائي من 1 إلى مليون، لكنه يملك مليون احتمال فقط. مع زيادة عدد السجلات، يزيد احتمال أن يتكرر رقم سبق استخدامه، ثم تحتاج آلية كشف وإعادة محاولة.

UUIDv4 يوسع مساحة الاحتمالات إلى درجة أكبر بكثير ويحدد أيضًا شكلًا معياريًا تتفق عليه الأنظمة. هذا يجعله أكثر ملاءمة لمعرفات عامة بين خدمات مختلفة من رقم اخترته أنت بمدى محدود من دون مواصفة.

معرفات UUID فريدة لعناصر متعددة
يمكن لخدمات منفصلة توليد معرفات ضمن مساحة UUID نفسها من دون تنسيق رقم متسلسل بينها.

لكن UUID ليس ضمانًا مطلقًا بعدم التصادم

المواصفة تتعامل مع UUID كمعرفات مصممة لتحقيق التفرد عبر الزمن والمساحة، لكنها لا تحوّل الاحتمال الرياضي إلى صفر. جودة مولد العشوائية وعدد القيم التي تنتجها وتطبيق الخوارزمية كلها مهمة.

لهذا من الطبيعي أن تظل قاعدة البيانات تملك قيد uniqueness على العمود إذا كان يجب ألا يتكرر المعرف. UUID يقلل الحاجة إلى التنسيق، لكنه لا يلغي سلامة تصميم قاعدة البيانات.

النقطة العملية: لا تختبر “هل UUID فريد؟” بإنشاء عشرة معرّفات وملاحظة أنها مختلفة. قوته تأتي من مساحة المعرّفات وطريقة التوليد المعيارية، لا من تجربة صغيرة على الشاشة.

الأمان والتخزين والتنسيق

هل UUID v4 يصلح ككلمة مرور أو Token سري؟

لا تتعامل معه بهذه الطريقة. المعرف والغرض الأمني ليسا الشيء نفسه. UUID قد يظهر في روابط وسجلات وواجهات API، وشكله الطويل لا يجعله سرًا.

المعرف ليس وسيلة مصادقة. إذا كان الوصول إلى مورد حساس يعتمد فقط على معرفة UUID، فأنت خلطت بين “من هو هذا السجل؟” و“من يملك صلاحية الوصول إليه؟”. استخدم نظام صلاحيات أو Tokens مصممة للمصادقة والتفويض.

وماذا عن crypto.randomUUID() في المتصفح؟

أداة UUID في تولاتي تستخدم crypto.randomUUID() عندما يكون متاحًا، مع بديل يعتمد على Web Crypto في المتصفحات الأخرى. هذا أفضل من بناء UUID من Math.random() يدويًا، لأن Web Crypto مخصص لتوفير عشوائية مناسبة للعمليات الأمنية والاستخدامات التي تحتاج جودة أعلى من مولدات الأرقام العامة.

الموقع يولد UUID محليًا داخل المتصفح، لذلك لا يحتاج إرسال النص أو المعرفات إلى خادم تولاتي لمجرد إنشائها.

هل ترتيب UUID v4 يعكس وقت الإنشاء؟

لا. v4 عشوائي بطبيعته، فلا تستخدم ترتيبه النصي لمعرفة أي سجل أقدم. إذا احتجت ترتيبًا زمنيًا، خزّن Unix Timestamp منفصلًا أو استخدم نوع UUID صُمم للترتيب الزمني بحسب احتياجات النظام.

RFC 9562 يعرّف UUIDv7 كإصدار مبني على Unix Epoch time مع مساحة عشوائية إضافية، وهو موجود أصلًا لمعالجة حالات تحتاج خصائص زمنية أفضل من v4. [المصدر: RFC 9562 — UUID Version 7]

v4 ليس “أفضل UUID” في كل مشروع. هو اختيار شائع للمعرفات العشوائية. v7 أو الإصدارات الأخرى لها خصائص مختلفة، والمطلوب هو مطابقة النوع مع تصميم النظام.

هل أخزن UUID كنص أم 16 بايت؟

التمثيل النصي سهل القراءة والتشخيص، لكنه يستهلك مساحة أكبر من التخزين الثنائي الخام. بعض قواعد البيانات تملك نوع UUID مخصصًا، وبعضها يخزنه كنص أو binary.

الاختيار يعتمد على قاعدة البيانات وأسلوب الفهرسة والتوافق مع الأدوات. المهم ألا تغيّر الشكل بلا حاجة بين كل طبقة، وأن توثق التمثيل المستخدم.

UUID وGUID: هل هما مختلفان؟

RFC 9562 يذكر أن UUIDs تُعرف أيضًا باسم GUIDs. في الاستخدام العام ستجد المصطلحين كثيرًا، خصوصًا في بيئات Microsoft. توجد تفاصيل تاريخية وتمثيلات ثنائية خاصة في بعض السياقات، لكن عند التعامل مع الشكل النصي القياسي لا تجعل اختلاف الاسم وحده يوحي بأنهما فئتان منفصلتان تمامًا.

متى يكون UUID v4 مناسبًا؟

معرفات سجلات موزعة

عندما تنشئ عدة خدمات أو أجهزة عناصر جديدة ولا تريد عدادًا مركزيًا واحدًا.

معرفات لا تحتاج ترتيبًا تسلسليًا

مثل كائنات داخل API أو ملفات أو طلبات داخلية.

إنشاء معرف قبل الحفظ

يمكن للعميل إنشاء UUID ثم إرسال السجل إلى الخادم من دون انتظار رقم قاعدة البيانات التالي.

ومتى لا يكون كافيًا وحده؟

إذا كنت تحتاج رقم فاتورة بشريًا متسلسلًا، UUID ليس بديلًا مناسبًا للرقم التجاري الذي يقرأه العميل. وإذا كنت تحتاج سرًا أمنيًا أو جلسة تسجيل دخول، استخدم آلية مصادقة مناسبة. وإذا كنت تحتاج ترتيبًا زمنيًا داخل الفهرس، قيّم ما إذا كان v7 أو مفتاح آخر يناسب التصميم أكثر.

قاعدة عملية للمطور

حدد أولًا وظيفة المعرف: هل هو مجرد مفتاح فريد؟ هل يجب أن يكون مرتبًا؟ هل سيظهر للمستخدم؟ هل يُستخدم بين خدمات منفصلة؟ بعد ذلك اختر النوع، ثم اترك مكتبة أو API موثوقة تولده بدل كتابة خوارزمية عشوائية يدوية.

أنشئ UUID v4 محليًا

أداة المطورين في تولاتي تنشئ من 1 إلى 20 UUID v4 في العملية الواحدة داخل المتصفح، مع إمكانية نسخ الناتج مباشرة.

فتح أداة UUID v4

ع م
عبد الكريم مرجانيكاتب موقع تولاتي — يراجع الأدلة التقنية بالرجوع إلى مواصفات IETF والواجهات القياسية للويب.

المصادر الرسمية المستخدمة

  1. IETF RFC 9562 — Universally Unique IDentifiers: المواصفة الحالية لـUUID والإصدارات والـvariant والبنية العامة.
  2. RFC 9562 — UUID Version 4: تفاصيل العشوائية و122 بت العشوائية في UUIDv4.
  3. W3C — Web Cryptography Level 2: واجهات Web Crypto المستخدمة للعشوائية والعمليات التشفيرية في تطبيقات الويب.