مولد UUID (الإصدار 4)

ولّد معرّفًا واحدًا أو عدة معرّفات UUID عشوائية من الإصدار 4 داخل متصفحك باستخدام مصدر عشوائية تشفيري — لا يُرسَل شيء إلى أي خادم.

1,052 مشاهدة

ما الذي يجعل UUID من الإصدار 4 فريدًا

UUID (معرّف فريد عالميًا) هو رقم من 128 بت، يُكتب تقليديًا كـ36 حرفًا مقسّمة 8-4-4-4-12 بالنظام السداسي عشري، مثل f47ac10b-58cc-4372-a567-0e02b2c3d479. من بين هذه الـ128 بت، يملأ الإصدار 4 — وهو النوع الذي ينتجه هذا المولد — 122 منها بمخرجات مولد أرقام عشوائية آمن تشفيريًا. أما البتات الست المتبقية فليست عشوائية على الإطلاق: إنها علامات ثابتة تحدد أن UUID من الإصدار 4 وتُميّز "متغيّره"، ولهذا يكون الحرف الذي يلي الشرطة الثانية مباشرة دائمًا 4، والحرف الأول من المجموعة التالية دائمًا 8 أو 9 أو a أو b.

122 بتًا عشوائيًا تمثل حيّزًا هائلًا: 2^122 قيمة ممكنة، أي نحو 5.3×10³⁶. ولتقريب الصورة، لو أنتج كل جهاز على وجه الأرض مليار UUID في الثانية باستمرار، لاستغرق الأمر عشرات المليارات من السنين من التوليد المجمَّع قبل أن تصل احتمالات تكرار عرضي واحد إلى 50% حتى. لهذا يمكن للأنظمة الموزعة — خدمات تعمل على مئات الخوادم المستقلة دون أي تنسيق فيما بينها — أن تُنشئ كل منها معرّفاتها الخاصة محليًا وتثق، دون التحقق من سجل مركزي، بأن أي معرّفَين لن يتصادما أبدًا. وهذا هو جوهر الغرض من الصيغة كلها: تعريف فريد دون الحاجة إلى استعلام قاعدة بيانات.

يتم الإنشاء هنا بالكامل داخل متصفحك باستخدام دالة crypto.randomUUID() الخاصة بواجهة Web Crypto API — مصدر العشوائية التشفيري نفسه الذي تستخدمه المتصفحات في العمليات الحساسة أمنيًا. لا يُرسَل شيء إلى خادم، ولا تُسجَّل أي بذرة عشوائية، وكل UUID تُنشئه مستقل تمامًا عن أي معرّف آخر.

ما ينبغي معرفته قبل استخدام UUID

الإصدار 4 ليس الإصدار الوحيد. يُضمِّن الإصداران v1 وv6 طابعًا زمنيًا وعنوان الشبكة الخاص بالجهاز المُنشئ، مما يجعلهما قابلين للترتيب لكنه يُسرّب أيضًا معلومات عن وقت ومكان إنشائهما. يُجزّئ v5 (hash) اسمًا تزوّده به، منتجًا نفس UUID في كل مرة لنفس المدخل — مفيد عندما تحتاج إلى معرّف حتمي وليس عشوائيًا. أما v7، وهو معيار أحدث، فيجمع بين بادئة زمنية وبتات عشوائية، مانحًا إياك التفرد والترتيب الزمني الطبيعي معًا. يبقى v4 الخيار الافتراضي الصحيح كلما احتجت ببساطة إلى معرّف عشوائي وغير قابل للتخمين وخالٍ من التصادم، ولم تحتج إلى أن يُرمِّز وقتًا أو اسمًا.

تحذير عملي واحد: نظرًا لأن قيم v4 عشوائية بالكامل، فإن استخدامها كمفتاح أساسي في قاعدة بيانات قد يضر بأداء الإدراج في الجداول المفهرسة بـB-tree، لأن الصفوف الجديدة تقع في مواقع غير متوقعة عبر الفهرس بدلًا من الإضافة بترتيب مرتب في أحد الطرفين. إذا كانت إنتاجية الإدراج مهمة على نطاق واسع، فإن بديلًا مرتبًا زمنيًا مثل UUIDv7 أو ULID يحافظ على نفس ضمان التفرد بـ128 بت مع بقائه صديقًا للفهرسة.

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

هل يمكن أن يتصادم معرّفا UUID مولَّدان؟

نظريًا نعم، لكن عمليًا يكاد يكون مستحيلًا: مع 2^122 احتمالًا، فإن توليد مليار UUID في الثانية لمدة 85 عامًا يمنح فرصة تصادم واحد بنسبة 50% تقريبًا. تعتمد أنظمة حول العالم على هذه الحقيقة.

هل يجب أن أستخدم UUID كمفتاح أساسي في قاعدة البيانات؟

تتألق في التوليد الموزّع والمعرّفات غير القابلة للتخمين، لكن إصدارات v4 العشوائية تُجزّئ فهارس B-tree. إذا كان أداء الإدراج مهمًا، فانظر إلى UUIDv7 (المرتب زمنيًا) أو ULID — بنفس الحجم وأكثر ملاءمة للفهرسة.

هل v4 هو الإصدار الوحيد؟

لا — يُضمِّن v1/v6 طابعًا زمنيًا وعنوان MAC، ويُجزّئ v5 اسمًا (hash) وينتج دائمًا نفس النتيجة، وv7 هو تنسيق أحدث يجمع بين طابع زمني وعشوائية. يبقى v4 الخيار الافتراضي عندما تحتاج فقط إلى معرّف فريد عشوائي.

ما وظيفة البتات الثابتة في UUID من الإصدار 4؟

من أصل 128 بتًا، 122 فقط عشوائية. البتات الست الأخرى محجوزة لتمييز الصيغة نفسها — نصف بايت واحد ثابت للإشارة إلى "الإصدار 4"، وآخر مقيَّد بمجموعة صغيرة من القيم (8 أو 9 أو a أو b) لتمييز "المتغيّر". لهذا يحمل كل UUID من الإصدار 4 الرقم 4 مباشرة بعد الشرطة الثانية، مهما كان عدد ما تُنشئه.

هل يمكنني استخدام UUID كرمز أمان، مثل رابط إعادة تعيين كلمة المرور؟

يُنشأ UUID من الإصدار 4 من مصدر عشوائية آمن تشفيريًا، لذا فإن تخمينه غير عملي — لكنه صُمم من أجل التفرد لا السرّية. في أي أمر حساس أمنيًا، اقرنه بانتهاء صلاحية مناسب وفرض الاستخدام لمرة واحدة والتحقق من جانب الخادم بدلًا من الاعتماد على UUID وحده.

التعليقات

لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!

أدوات مشابهة