RevealTheme logo

مولّد UUID

أنشئ معرّفات UUID v4 (معرّفات فريدة عالميًا عشوائية). كل نقرة تُنتج معرّفًا جديدًا.

كيفية استخدام هذه الأداة

  1. 1

    Click the Generate UUID button to produce a fresh random v4 UUID.

  2. 2

    Read the 36-character identifier shown in the canonical 8-4-4-4-12 format below the button.

  3. 3

    Click Copy to put the UUID on your clipboard for pasting into code, a database, or a config file.

  4. 4

    Click Generate UUID again whenever you need another one — every click replaces the value with a brand-new random UUID.

ما هو UUID ولماذا تستخدمه البرمجيات؟

معرّف UUID (Universally Unique Identifier، ويُسمى أحيانًا GUID في سياقات Microsoft) هو قيمة بطول 128 بت تُستخدم لتعريف الكيانات دون الحاجة إلى تنسيق بين الأنظمة. وفكرة UUID هي أن برنامجين مختلفين، يعملان على جهازين مختلفين ولا يعرف أحدهما الآخر، يمكنهما توليد معرّفات UUID والافتراض بثقة أنها لن تتصادم أبدًا. وهذه الخاصية تتيح تصميم الأنظمة الموزّعة: إذ يمكنك السماح لأي خدمة بسكّ المعرّفات محليًا دون عدّاد مركزي، ودمج قواعد البيانات دون إعادة ترقيم الصفوف، وتوليد المعرّفات مسبقًا على العميل قبل أن يرى الخادم الطلب أصلًا. لمعرّفات UUID خمسة إصدارات قياسية تُعرّفها RFC 4122: v1 (قائم على الوقت + عنوان MAC، ويفشي وقت الإنشاء وهوية الجهاز)، وv3 (تجزئة MD5 لمجال أسماء + اسم)، وv4 (عشوائي، الأكثر شيوعًا)، وv5 (تجزئة SHA-1 لمجال أسماء + اسم). وقد أضافت RFC 9562 الإصدار v6 (مرتّب زمنيًا، مثل v1 لكن دون إفشاء MAC) والإصدار v7 (طابع زمن Unix + عشوائي، مصمّم خصيصًا للمفاتيح الأساسية في قواعد البيانات لأنه يُرتَّب زمنيًا). تولّد هذه الأداة معرّفات UUID v4 عبر crypto.randomUUID()، التي تستخدم عشوائية قوية تشفيريًا من نظام التشغيل الأساسي للمتصفح، وهي المصدر نفسه الذي تأتي منه مفاتيح TLS. والمخرجات مطابقة بايتًا ببايت لمخرجات uuid.uuid4() في Python، وcrypto.randomUUID() في Node، وgoogle/uuid.NewRandom() في Go.

حالات الاستخدام الشائعة

  • مفاتيح أساسية لقواعد البيانات: استبدل الأعداد الصحيحة ذاتية الزيادة عندما تحتاج إلى دمج قواعد بيانات أو توليد المعرّفات من جانب العميل.

  • معرّفات الجلسات في ملفات تعريف الارتباط: طويلة بما يكفي لجعل تخمين معرّف جلسة صالح بالقوة العمياء غير ممكن حسابيًا.

  • مفاتيح إتقان (idempotency) لطلبات واجهات برمجة التطبيقات: كرّر الطلب بأمان؛ فالخادم يزيل التكرار عبر UUID.

  • معرّفات رفع الملفات: سمِّ الملفات المرفوعة بـ UUID لمنع تصادم المسارات وتجنّب كشف أسماء الملفات الأصلية.

  • معرّفات التتبّع الموزَّع: كل طلب يحصل على UUID يُنشَر عبر الخدمات لربط السجلات.

  • معرّفات بيانات الاختبار: عشوائية يمكن التنبّؤ بها لبيانات الاختبار دون تنسيق المعرّفات عبر حالات الاختبار.

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

ماذا يعني v4؟
الإصدار 4: يُولَّد من 122 بت من العشوائية إضافة إلى 6 بتات ثابتة للإصدار/المتغيّر. أما الإصدارات الأخرى: فإن v1 قائم على طابع زمني + MAC (لا تستخدمه؛ فهو يفشي هوية الجهاز والوقت)، وv3/v5 تجزئات حتمية لمجال أسماء + اسم (مفيدة للمعرّفات المشتقّة المستقرة)، وv7 عشوائي ببادئة طابع زمني (ممتاز لقواعد البيانات لأنه يُرتَّب زمنيًا). وفي معظم الحالات، يكون v4 هو الخيار الافتراضي الصحيح.
ما مدى تفرّد معرّفات UUID فعلًا؟
تملك معرّفات UUID v4 عشوائية فعّالة قدرها 122 بت: أي 5,3×10^36 قيمة ممكنة. سيتعيّن عليك توليد 2,71 تريليون معرّف UUID قبل بلوغ احتمال تصادم بنسبة 50%. ولوضع ذلك في سياقه، لو ولّدت مليار معرّف UUID في الثانية، لاحتجت إلى 85 عامًا لبلوغ تلك العتبة. والتصادمات العملية لا تحدث مع مولّد أرقام عشوائية جيد.
هل ينبغي أن أستخدم v4 أم v7 للمفاتيح الأساسية في قواعد البيانات؟
v7 أفضل لقواعد البيانات. فمعرّفات UUID v4 عشوائية، ما يعني أن الصفوف الجديدة تتبعثر عشوائيًا عبر فهارس B-tree، مسبّبةً تضخّم الفهرس وبطء الإدراج عند النطاق الكبير. أما v7 فيضع الطابع الزمني في المقدمة، فتُرتَّب معرّفات UUID الجديدة دائمًا بعد القديمة، ما يحافظ على أنماط الإدراج المتسلسلة. وتستفيد PostgreSQL وMySQL وSQL Server من v7. وإذا كانت مكتبتك لا تدعم v7 بعد، فإن معرّفات ULID بديل شائع يتمتّع بالخاصية نفسها.
هل استخدام crypto.randomUUID() آمن؟
نعم. فهو محدَّد في WHATWG ومُطبَّق في جميع المتصفحات الحديثة عبر مولّد الأرقام العشوائية التشفيري لنظام التشغيل (وهو المصدر نفسه الذي تأتي منه مفاتيح TLS). والمخرجات غير قابلة للتنبؤ وتتوزّع بانتظام عبر مساحة UUID v4 بأكملها.
ما الفرق بين UUID وGUID؟
هما متطابقان وظيفيًا: فـ GUID هو مصطلح Microsoft للمفهوم نفسه. وتختلف صيغة البايتات في بعض واجهات API الخاصة بـ Microsoft (إذ يستخدم Guid.ToByteArray() في .NET ترتيب بايتات مختلطًا في الحقول الثلاثة الأولى)، لذا انتبه لترتيب البايتات عندما يهمّ التشغيل البيني. أما صيغة السلسلة القياسية (8-4-4-4-12) فمتطابقة.
هل يمكنني اختصار UUID لاستخدامه في الروابط؟
نعم: رمّز الـ 128 بت بترميز Base62 أو Base64 بدلًا من الصيغة السداسية العشرية القياسية. يمنحك Base62 عدد 22 حرفًا؛ ويمنح Base64 عدد 22 حرفًا مع الحشو أو 22 في صيغته الآمنة للروابط. كما تستخدم بعض المكتبات صيغ 'UUID قصير'. أما البتات الأساسية فلا تتغيّر؛ ويختلف ترميز العرض فقط.
لماذا يبدأ معرّف UUID لديّ بالأحرف نفسها التي يبدأ بها آخر؟
إنها مصادفة: فمعرّفات UUID v4 عشوائية. ومع وجود 36 حرفًا سداسيًا عشريًا إجمالًا و22 حرفًا سداسيًا عشريًا عشوائيًا فقط (4 محجوزة للإصدار/المتغيّر و4 شرطات)، تكون بعض تطابقات البادئة حتمية عندما تولّد الكثير منها. ويظل معرّف UUID الكامل فريدًا حتى لو تطابقت البادئات.

أدوات ذات صلة