مولّد UUID

يولّد UUID آمنًا تشفيريًا — v4 عشوائيًا أو v7 مرتّبًا زمنيًا. يستخدم Web Crypto API في المتصفح؛ ولا تُرسَل أي قيمة إلى الخادم.

آخر تحديث:

الخيارات
الإصدار
بين 1 و100.
التنسيق

UUID المُولّدة

اضغط "ولّد".

متى تحتاج UUID فعلًا

حين تريد معرّفات لا تُفشي شيئًا

الرقم التسلسلي يحمل معلومات لم تقصد نشرها: كم عميلًا لديك، وكم طلبًا استلمت. المثال المحسوب أدناه يبيّن حجم التسريب بالأرقام.

حين يتولّد المعرّف في أكثر من مكان

تطبيق يعمل دون اتصال، وخدمات متعددة تكتب في جداولها الخاصة؛ العدّاد المركزي هنا عبء تنسيق ونقطة فشل. مع UUID يولّد كل طرف معرّفه محليًا ولا يصطدم بأحد.

قبل اختيار نوع عمود المفتاح

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

مثال محسوب: ماذا يكشف رقم فاتورتك عنك

متجر يرقّم طلباته تسلسليًا. عميل واحد فضولي يكفي لتحويل هذا الترقيم إلى تقرير مبيعات علني.

  1. طلبُ الصباح حمل الرقم 4180، وطلبُ المساء من اليوم نفسه حمل الرقم 4213.
  2. الفرق 4213 − 4180 = 33 طلبًا؛ هذه حصيلة يوم كامل ظاهرة لكل من قارن فاتورتين.
  3. وبتكرار القياس أسبوعًا يُرسَم منحنى مبيعاتك دون اختراق أي نظام.
  4. مع UUID v4 يصبح المعرّف 122 بت عشوائية: لا عدّ، ولا ترتيب، ولا تخمين لمعرّف صالح آخر.
  5. وإن لزم الترتيب الزمني داخليًا، أبقِ عمود تاريخ منفصلًا للفرز، أو استخدم v7 في الداخل وv4 فيما يُنشر.

هذا الاستدلال قديم وموثّق باسم «مسألة الدبابات الألمانية»: في الحرب العالمية الثانية قدّر الحلفاء حجم إنتاج الدبابات من الأرقام التسلسلية لقطعها المصنّعة، وجاء التقدير قريبًا من السجلات الفعلية بعد الحرب. أرقام الفواتير والطلبات تخضع للاستدلال نفسه؛ والمعرّف العشوائي يقطعه من جذره.

أربعة أخطاء متكررة

توليد UUID من Math.random

أمثلة قديمة منسوخة تبني المعرّف من مولّد شبه عشوائي قابل للتنبؤ. كمعرّف داخلي قد لا تلاحظ فرقًا؛ لكن إن دخلت القيمة في رابط استعادة كلمة مرور صار التنبؤ بها ثغرة. استخدم واجهات التشفير دائمًا، كما تفعل هذه الأداة.

استخدام v7 حيث يجب إخفاء وقت الإنشاء

أول 48 بت من v7 تعلن لحظة التوليد بدقة الميلي ثانية. للمفاتيح الداخلية هذه ميزة فهرسة؛ أما المعرّفات المنشورة التي يُفترض ألّا تكشف تاريخ إنشاء الحساب أو الطلب، فمكانها v4.

اقتطاع المقطع الأول والاكتفاء به

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

خلط الأحرف الكبيرة والصغيرة في التخزين

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

أدوات تُستعمل إلى جانبها

  • مولّد Hash (SHA) احسب ملخصات SHA-1 وSHA-256 وSHA-384 وSHA-512 للنص فورًا. عبر Web Crypto API، في المتصفح.
  • مُرمّز/مُفكّك Base64 رمّز النص إلى Base64 أو فُكّ ترميزه. متغيّر قياسي وآمن للروابط (base64url)؛ متوافق مع UTF-8، في المتصفح.
  • حاسبة CIDR / Subnet احسب عنوان الشبكة والبث وقناع الشبكة الفرعية ونطاق المضيفين القابل للاستخدام ونوع العنوان من تدوين CIDR.
  • محلّل تعبير Cron حلّل تعبير cron حقلًا بحقل وشاهد أوقات التشغيل التالية. لـ Kubernetes CronJob والمهام المجدولة.
  • محوّل Epoch / Unix Timestamp حوّل طوابع Unix epoch الزمنية إلى تواريخ مقروءة والعكس. يُكتشَف وضع الثواني والميلي ثانية تلقائيًا.

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

ما هو UUID v4؟

UUID v4 معرّف من 128 بت، 122 بت منها مُولّدة عشوائيًا. وهو فريد دون الحاجة إلى سلطة مركزية؛ ومثالي للمفاتيح الأساسية في قواعد البيانات ومعرّفات الجلسات وأسماء الملفات. واحتمال التصادم مهمل عمليًا.

ما الفرق بين v4 وv7؟

v4 عشوائي بالكامل؛ القيم المُولّدة غير مرتّبة. أما v7 فيحمل في أول 48 بت طابعًا زمنيًا بالميلي ثانية — أي إنه مرتّب زمنيًا. هذا يجعل v7 أكفأ بكثير كمفتاح أساسي في قواعد البيانات: يقلّ تشظّي الفهرس ويبقى الإدراج متسلسلًا.

هل تُولَّد هذه الـ UUID بأمان؟

نعم. تأتي العشوائية من واجهة crypto.getRandomValues / crypto.randomUUID في المتصفح، وهي مصدر آمن تشفيريًا. ولا يُستخدَم مولّد قابل للتنبؤ مثل Math.random. ولا تُرسَل أي قيمة إلى الخادم.

ما احتمال تصادم اثنين من الـ UUID؟

في v4 توجد 122 بت من العشوائية. لرؤية تصادم يلزم توليد مليارات الـ UUID — احتمال التصادم في 103 تريليون UUID بحدود واحد في المليار. وفي الأنظمة العملية يُهمَل التصادم.

كيف أولّد UUID في .NET؟

في .NET، تولّد Guid.NewGuid() معرّف GUID عشوائيًا شبيهًا بـ v4. ومع .NET 9+ تولّد Guid.CreateVersion7() معرّف v7 مرتّبًا زمنيًا — وهو المفضّل كمفتاح أساسي للجداول كثيفة الإدراج.