دليل إنشاء GUID/UUID في JavaScript: من النظرية إلى التطبيق

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تحتاج GUID/UUID ولماذا هو أسهل مما تظن؟

\n\n

هل تساءلت يومًا كيف تميز المواقع والتطبيقات بين سجل وآخر في قاعدة البيانات؟ أو كيف يتذكر متصفحك أن أنت من أضفت العناصر إلى سلة التسوق وليس جارك؟ غالبًا ما يكمن السر في سلسلة نصية صغيرة ولكنها قوية — GUID (المعرف الفريد عالميًا) أو أخيه الأكثر دقة UUID (المعرف الفريد الشامل).

\n\n

على Stack Overflow، يجمع سؤال "How do I create a GUID / UUID?" آلاف المشاهدات. هذا ليس من قبيل الصدفة. كل مطور يواجه عاجلاً أم آجلاً مهمة: "أحتاج إلى معرف فريد، لكنني لا أريد إضافة مكتبة كاملة". اليوم سنشرح هذا الموضوع في JavaScript من البداية إلى النهاية. ستتعلم ليس فقط كيفية إنشاء UUID، بل وأي طريقة تختار لمهمتك.

\n\n

هل أنت مستعد؟ لنبدأ!

\n\n

ما هو UUID حقًا؟ (ولماذا ليس سحرًا)

\n\n

قبل كتابة الكود، دعنا نفهم النظرية. UUID هو رقم 128 بت يُكتب عادةً بصيغة سداسية عشرية مع شرطات. يبدو هكذا:

\n\n
123e4567-e89b-12d3-a456-426614174000
\n\n

يصف معيار RFC 4122 عدة إصدارات من UUID. أشهرها:

\n
    \n
  • الإصدار 4: UUID عشوائي. تقريبًا كل ما تجده على الإنترنت هو هذا النوع.
  • \n
  • الإصدار 1: يعتمد على الوقت وعنوان MAC. قديم ولكنه موجود أحيانًا.
  • \n
  • الإصدار 5: يُنشأ من اسم (مثل URL) باستخدام تجزئة SHA-1.
  • \n
\n\n

الخاصية الرئيسية لـ UUID هي التفرد بدون خادم مركزي. احتمالية التصادم (تطابق معرفين) ضئيلة جدًا لدرجة يمكن تجاهلها. يُقال أنه إذا قمت بإنشاء مليار UUID في الثانية، فسيستغرق إنشاء مكرر حوالي 100 عام. ضمان جيد، أليس كذلك؟

\n\n

الطريقة الأصح: crypto.randomUUID()

\n\n

إذا كنت تكتب JavaScript حديثة (ES2020+)، فلديك حل مدمج — crypto.randomUUID(). هذه الطريقة متاحة في المتصفحات وNode.js (بدءًا من الإصدار 14.17.0).

\n\n

إليك كيفية عملها:

\n\n
// المتصفح\nconst myUUID = crypto.randomUUID();\nconsole.log(myUUID); // الإخراج: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
\n\n
// Node.js (الإصدارات الحديثة)\nconst { randomUUID } = require('crypto');\nconst myUUID = randomUUID();\nconsole.log(myUUID);
\n\n

لماذا هو الخيار الأفضل؟

\n
    \n
  • الأمان: يستخدم مولد أرقام عشوائية آمن تشفيريًا. لا أنماط يمكن توقعها.
  • \n
  • المعيارية: يتوافق تمامًا مع RFC 4122 الإصدار 4.
  • \n
  • الأداء: مكتوب بلغة C++ تحت الغطاء، ويعمل بسرعة فائقة.
  • \n
  • بدون تبعيات: لا حاجة لتثبيت مكتبات خارجية.
  • \n
\n\n

هام: في المتصفحات القديمة (Internet Explorer، Safari قبل 15.4) قد لا تكون هذه الطريقة متاحة. إذا كنت تدعم هذه "الديناصورات"، تابع القراءة — لدينا خيارات بديلة.

\n\n

الحيلة الكلاسيكية: Math.random() + قالب RFC 4122

\n\n

قبل ظهور crypto.randomUUID()، كان المطورون يخترعون حلولاً بدائية. الخيار الأكثر شيوعًا هو استخدام Math.random() لتعويض الأرقام في قالب UUID. هذا الكود يتداول على الإنترنت منذ أكثر من 10 سنوات:

\n\n
function generateUUID() {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0;\n        const v = c === 'x' ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n\nconsole.log(generateUUID()); // الإخراج: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
\n\n

كيف يعمل هذا؟

\n
    \n
  1. القالب xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx يحدد التنسيق.
  2. \n
  3. الرمز 'x'

المدونات

توصيات الكتب