مولِّد UUID
تطويريولِّد UUID عشوائية تشفيريًا (RFC 4122 v4) باستخدام crypto.randomUUID.
في هذه الصفحة
ما هو الـ UUID؟#
الـ UUID (المعرّف الفريد العالمي، ويُسمّى GUID على أنظمة Microsoft) معرّف بطول 128 بت يُعرَض كـ 32 رقمًّا سداسي عشر مجمّعًا في الصيغة 8-4-4-4-12، مثل c9bf1d4d-7d4f-4b3a-8b2c-1e5f6a7b8c9d. الفكرة بسيطة لكنّها قويّة: ولِّد معرّفات عند الطلب، بلا سلطة مركزية وبلا تنسيق بين الآلات، ويبقى احتمال تصادم اثنين منها عمليًّا صفرًا. تلك الخاصّية هي ما يجعل UUID الاستراتيجية الافتراضية للمفتاح الأساسيّ في قواعد البيانات الموزّعة، وحقل id على موارد JSON API تقريبًا كلّها، ومعرّفات الارتباط التي تربط أسطر السجلّ عبر الخدمات المصغّرة، وأسماء ملفّات الـ blobs المرفوعة.
تُولِّد هذه الصفحة معرّفات UUID بنسخة RFC 4122 version 4 — النسخة المبنية من بتات عشوائية. النسخة 4 هي ما تريده في كلّ حالة حديثة تقريبًا: فهي لا تحمل عنوان MAC للآلة (على خلاف v1)، ولا تُضمِّن تراتبية فضاء أسماء (على خلاف v3/v5)، وتعتمد كليًّا على العشوائية التشفيرية للتفريد. تستطيع توليد معرّف واحد أودفعة حتى 10,000 دفعةً، بأحرف صغيرة أوكبيرة، بالكامل داخل متصفّحك.
اثنان من أرقام الـ hex الـ 32 ليسا عشوائيَّين فعلًا — بل يُعلنان نوع الـ UUID نفسه. رمز النسخة في الموضع 14 (أول محرف في المجموعة الثالثة) هو دائمًا 4، ورمز النوع في الموضع 19 (أول محرف في المجموعة الرابعة) هو دائمًا 8 أو9 أوa أوb. ولهذا فإنّ كلّ قيمة تراها هنا تأخذ الشكل xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxx. ويُضاعِف الموضعان الثابتان كبصمة واصفة: أيّ سلسلة تطابق هذا الشكل هي UUID إصدار v4، وregex قصير يصادق على الملايين منها.
كيفية الاستخدام#
- اضبط حقل رقم العدد في الأعلى بقدر ما تريد من معرّفات UUID — من 1 إلى 10,000. ويُحصر الحقل ضمن هذا النطاق.
- فعِّل أحرف كبيرة إن احتجت مخرَجًا كاملًا بأحرف كبيرة (بعض الأنظمة العتيقة وإصلاحات GUID من Microsoft تفضّل
C9BF1D4D-…). اتركه معطّلًا للصيغة الصغيرة الافتراضية التي تستخدمها معظم الحزم الحديثة. - اضغط توليد. تظهر القيم في منطقة المخرَج وحيدة المسطّرة، واحدةً لكل سطر.
- اضغط نسخ لنسخ الدفعة كاملةً إلى حافظتك، جاهزة للّصق في
INSERTخاصّ بـ SQL أوCSV أوملف اختبار أوسكربت بذور. - اضغط توليد ثانيةً كلّما احتجت دفعةً جديدة — كلّ نقرة تسحب بتات عشوائية جديدة وتُنتج قيمًا لم توجد من قبل.
الميزات الرئيسية#
- عشوائية تشفيرية حقيقية. تستخدم
crypto.randomUUID()في السياقات الآمنة، مع احتياطيcrypto.getRandomValuesيُطبِّق أخذ عيّنات رفض على بتات النسخة والنوع — لاMath.random()الذي لا يصلح للمعرّفات. - توليد دفعات. حتى 10,000 UUID بنقرة، واحدة لكل سطر، فتبذُر قاعدة بيانات أوملف اختبار دون كتابة سكربت بنفسك.
- أحرف صغيرة أوكبيرة. مفتاحٌ واحد يغطّي الإصلاحَين.
- متوافق مع RFC 4122 v4. رمز النسخة دائمًا
4ورمز النوع دائمًا8/9/a/b، فتمرّ كلّ قيمة عبر regex الخاصّ بـ v4 القياسي. - 100% من جهة العميل. بلا خادم خلفيّ ولا قياسات. المعرّفات التي تولّدها هنا لا تُسجَّل في أيّ مكان — فهي ملكك لحظة ظهورها.
مثال عملي#
اضغط توليد مع ترك العدد على الافتراضي 5 وأحرف كبيرة معطّلًا، فتحصل على خمسة أسطر كهذه (قيمك الفعلية ستختلف — فهي عشوائية):
7f3a9c2e-1b4d-4e8f-a6c3-9d2b8e1f0a47
2c8d4f1a-9e3b-47a2-8c6d-1f5e9a0b3c28
a1b2c3d4-e5f6-4789-abcd-ef0123456789
9e8d7c6b-5a4f-3210-ba98-76543210fedc
4f3e2d1c-0b9a-8765-4321-fedcba987654
انظر بدقّة إلى المجموعة الثالثة من أيّ سطر: دائمًا تبدأ بـ 4. وانظر إلى المجموعة الرابعة: دائمًا تبدأ بـ 8 أو9 أوa أوb. هذان المحرفان ليسا عشوائيَّين — بل علامتا النسخة والنوع، وهما السبب في أنّ مُصادِقًا من سطر واحد يستطيع الجزم بأنّ سلسلةً ما هي UUID إصدار v4 حقيقية.
وإن فعّلت أحرف كبيرة وولّدت ثانيةً، خرج الشكل نفسه بأحرف كبيرة، مثل 7F3A9C2E-1B4D-4E8F-A6C3-9D2B8E1F0A47 — بتات متطابقة، لكن رُسمت للأنظمة التي تتوقّع GUID بأحرف كبيرة.
الأسئلة الشائعة#
ما أمد تفريد UUID إصدار v4 فعلًا؟ هل سأحصل على تكرار يومًا؟#
تتعقّد الأرقام بسرعة. يحوي UUID إصدار v4 واحد 122 بت من العشوائية الفعلية (128 ناقص 4 بتات نسخة و2 بتات نوع). لبلوغ احتمال 50% لتصادمٍ واحد ستحتاج توليد نحو 2.71 × 10^36 معرّفًا — أي مليار مليار مليار في الثانية لزمنٍ أطول من عمر الكون. ولأيّ قاعدة بيانات أونظامٍ واقعي يمكنك معاملة التصادمات كمستحيلة، دون فحص.
هل يُؤمَن استخدام هذه المعرّفات UUID كمفاتيح أساسية في قواعد البيانات؟#
نعم — فالنسخة 4 هي الخيار الأكثر شيوعًا لذلك لأنّها لا تحتاج تنسيقًا. التحفّظ الوحيد هو تفتّت الفهرس: المفاتيح العشوائية البحتة تت scattered عبر B-tree، فعلى جدول PostgreSQL أوMySQL عالي الكتابة جدًّا قد تفضّل نسخة UUIDv7 (مرتّبة زمنيًّا). أمّا لمعرّفات الموارد على مستوى التطبيق ومعرّفات الارتباط ومعظم الجداول، فالنسخة v4 المجرّدة كافية.
لماذا لا أكتفي بـ Math.random() لبناء UUID؟#
لأنّ Math.random() ليس سليمًا تشفيريًّا — قد يكون مخرَجه قابلًا للتنبؤ بما يكفي ليُخمِّن مهاجمٍ يُراقب بضعة معرّفات بقيةَ المعرّفات. تستخدم هذه الأداة عمدًّا crypto.randomUUID() (مع احتياطي crypto.getRandomValues وضبط صحيح للنسخة/النوع)، الذي يسحب من CSPRNG الخاصّ بنظام التشغيل. ولمعرف يُعرّف مستخدمًا أوجلسةً أوموردًا، يهمّ هذا التمييز.
هل أستطيع توليد الإصدار 1 أو5 أوUUID المُسمّاة هنا؟#
لا — هذه الصفحة مقتصرة عمدًا على v4، لأنّ v4 يغطّي الغالبية الساحقة من حالات الاستخدام الفعلية ولا يحتاج مُدخلات سوى مصدر عشوائي. وإن احتجت UUID إصدار v5 مبنىً على الاسم (حتميّ من اسم وفضاء أسماء)، فذاك حسابٌ مختلف ينتمي إلى كود تطبيقك أوأداة متخصّصة.