مولد UUID المجاني - إنشاء معرفات UUID من الإصدار 1 و 4 فوراً
قم بإنشاء معرفات فريدة على الفور باستخدام مولد UUID المجاني. أنشئ معرفات UUID من الإصدار 1 (المعتمدة على الوقت) والإصدار 4 (العشوائية) لقواعد البيانات والواجهات البرمجية والأنظمة الموزعة.
مولد معرف فريد عالمي
التوثيق
مولّد UUID
مولّد UUID هو أداة تنشئ معرّفًا فريدًا عالميًا، أو UUID: رمزًا بطول 128 بت يُستخدم لوسم جزء من البيانات بحيث لا يُرجّح أن يشترك أي عنصر آخر في أي مكان في الوسم نفسه. تنشئ هذه الصفحة UUIDs من الإصدار 1 (المعتمد على الوقت) والإصدار 4 (العشوائي).
ما هو UUID؟
UUID هو عدد بطول 128 بت مكتوبًا على هيئة 32 رقمًا ست عشريًا (المحارف 0–9 وa-f). يُقسَّم إلى خمس مجموعات تفصل بينها وُصلات، وفق النمط 8-4-4-4-12، بإجمالي 36 محرفًا. ويبدو UUID نموذجي هكذا:
1550e8400-e29b-41d4-a716-446655440000
2تُعرِّف RFC 9562 معرّفات UUID، وقد نشرتها فرقة عمل هندسة الإنترنت في مايو 2024، وحلّت محل RFC 4122 الأقدم الصادر في 2005. وتصف الوثيقتان تنسيقًا واحدًا بطول 128 بت. وتستخدمها البرمجيات لتحديد صفوف قواعد البيانات والملفات وجلسات المستخدمين والسجلات الأخرى من دون الحاجة إلى جهة مركزية توزّع الأرقام. ونظرًا إلى كِبَر فضاء UUIDs الممكنة، يمكن لحاسوبين إنشاء UUIDs مستقلين في اللحظة نفسها، ومن النادر جدًا أن ينتجا UUID واحدًا متطابقًا.
تنسيق UUID وبنيته
تُقسَّم بتات UUID البالغ عددها 128 بت إلى حقول مسمّاة. ويشغل كل حقل عددًا ثابتًا من البتات:
time_low- 32 بتtime_mid- 16 بتtime_hi_and_version- 16 بتclock_seq_hi_and_reserved- 8 بتclock_seq_low- 8 بتnode- 48 بت
تحمل أربعة بتات داخل time_hi_and_version رقم إصدار UUID، بينما تحمل بتّان داخل clock_seq_hi_and_reserved النوع، الذي يحدد للبرمجيات كيفية قراءة بقية الحقول. وقد عُرّفت ثمانية إصدارات.
تأتي أسماء الحقول أعلاه من الإصدار 1، حيث تحمل فعلًا قيمة وقت وقيمة عقدة. وتحتفظ الإصدارات الأخرى بالتخطيط نفسه 8-4-4-4-12 وبحدود الحقول نفسها، لكنها تملأ معظم البتات ببيانات عشوائية. وفي UUID من الإصدار 4 تكون المجموعة المسماة time_low عشوائية، وليست وقتًا.
كيفية إنشاء UUID باستخدام هذه الأداة
- اختر إصدارًا: الإصدار 1 (المعتمد على الوقت) أو الإصدار 4 (العشوائي).
- اقرأ UUID من مربع النتيجة. يظهر UUID جديد فور تحميل الصفحة أو تغيير الإصدار.
- اختر «إنشاء» للحصول على UUID آخر.
- اختر «نسخ» لنسخ النتيجة إلى الحافظة، ثم ألصقها في شيفرة أو قاعدة بيانات أو ملف إعدادات.
تقسم اللوحة الموجودة أسفل النتيجة UUID إلى حقوله الخمسة وتسمي كل حقل، مما يسهّل العثور على رقم الإصدار ورقم النوع.
يناسب الإصدار 4 معظم المهام، بما فيها مفاتيح قواعد البيانات ورموز الجلسات، لأنه لا يحمل أي معلومات عن وقت إنشائه أو مكانه. ويناسب الإصدار 1 السجلات التي يلزم استرجاع وقت إنشائها من المعرّف نفسه، مثل إدخالات السجل.
UUID من الإصدار 1 مقابل الإصدار 4
يشفّر الإصدار 1 الطابع الزمني الحالي، إضافة إلى تسلسل ساعة وقيمة عقدة مختارين عشوائيًا. ويسمح المعيار بأن تكون قيمة العقدة عنوان شبكة حقيقيًا للحاسوب (MAC)، لكنه يسمح أيضًا بقيمة عقدة مولّدة عشوائيًا بوصفها بديلًا يحافظ على الخصوصية. تستخدم هذه الأداة الخيار العشوائي دائمًا؛ إذ لا تقرأ UUIDs من الإصدار 1 عنوان MAC حقيقيًا ولا تكشفه. ويشترط المعيار أيضًا ضبط البت الأدنى من البايت الأول لحقل العقدة على 1 عند استخدام قيمة عقدة عشوائية، وتضبطه هذه الأداة. ولا تحتوي بطاقات الشبكة الحقيقية على هذا البت مضبوطًا، لذلك لا يمكن الخلط بين العقدة العشوائية والحقيقية. ولهذا يكون الرقم السداسي الثاني من المجموعة الخامسة فرديًا دائمًا في UUID من الإصدار 1 من هذه الصفحة: 1 أو 3 أو 5 أو 7 أو 9 أو b أو d أو f.
يمكن قراءة الطابع الزمني داخل UUID من الإصدار 1، ومن ثم ترتيب السجلات حسب وقت إنشائها. لكن فرز نص UUID نفسه لا يحقق ذلك، لأن المجموعة الأولى تحمل أدنى 32 بت من الطابع الزمني، وتلتف قيمها كل نحو 7 دقائق. ويخزن الإصدار 6، المضاف في RFC 9562، الطابع الزمني نفسه مع وضع البتات العليا أولًا، بحيث ينجح فرز النص العادي.
يتكوّن الإصدار 4 من بتات عشوائية، مع تثبيت بضعة بتات لتمييز الإصدار والنوع. ولا يحمل طابعًا زمنيًا أو بيانات خاصة بالجهاز، لذلك لا يكشف شيئًا عن وقت إنشائه أو مكانه. ولا يمكن فرزه حسب ترتيب الإنشاء.
توجد ستة إصدارات أخرى في المعيار، لكنها لا تُنشئها هذه الأداة: الإصدار 2 (أمان DCE، نادر الاستخدام)؛ والإصداران 3 و5، اللذان يُبنيان بتجزئة مساحة أسماء واسم باستخدام MD5 أو SHA-1، بحيث ينتج الإدخال نفسه UUID نفسه دائمًا؛ والإصدارات 6 و7 و8، التي أضافها RFC 9562 في (24,300 سم) 2024 للمعرّفات القابلة للفرز والمخصّصة.
كيفية حساب UUID (الصيغة)
الإصدار 4:
- أنشئ 128 بتًا عشوائيًا.
- اضبط بتات الإصدار الأربعة، أي الرقم السداسي الأول من المجموعة الثالثة، على
0100(بالنظام السداسي4). - اضبط البتين الأعلى في المجموعة الرابعة على
10(بحيث يكون الرقم السداسي الأول من تلك المجموعة8أو9أوaأوb).
لا تكون سوى 122 من أصل 128 بتًا عشوائية فعلًا، لأن 6 بتات تُثبَّت بالخطوتين 2 و3. وينتج عن ذلك 2^122، أي نحو 5.3 × 10^36، من UUIDs الممكنة للإصدار 4.
الإصدار 1:
- خذ الوقت الحالي بوصفه عددًا من فواصل زمنية طول كل منها 100 نانوثانية منذ 15 أكتوبر 1582، وهو تاريخ إصلاح التقويم الغريغوري. وعمليًا، يساوي ذلك وقت Unix المعتاد بالميلي ثانية مضافًا إليه 12,219,292,800,000، ثم يُضرب الناتج في 10,000.
- قسّم ذلك العدد البالغ 60 بتًا على ثلاثة حقول: توضع أدنى 32 بتًا في
time_low، والبتات التالية وعددها 16 فيtime_mid، والبتات العليا وعددها 12 فيtime_hi_and_version. - أنشئ تسلسل ساعة بطول 14 بت، لاستخدامه في تجنب التصادمات إذا ضُبطت ساعة النظام إلى الوراء.
- أنشئ قيمة عقدة بطول 48 بت، مع ضبط البت الأدنى من بايتها الأول على 1.
- اضبط بتات الإصدار على
0001وبتات النوع على10.
عبر جميع إصدارات UUID، يضم فضاء 128 بت الكامل 2^128، أي نحو 3.4 × 10^38، من القيم الممكنة. وهذا العدد كبير إلى درجة تجعل التصادمات العشوائية غير مقلقة عمليًا.
مثال محلول
قراءة UUID من الإصدار 4. خذ المثال السابق: 550e8400-e29b-41d4-a716-446655440000.
- المجموعة الثالثة،
41d4: الرقم الأول هو4، مما يحدد أن هذا UUID من الإصدار 4. - المجموعة الرابعة،
a716: الرقم الأول،a(ثنائيًا1010)، يبدأ بالنمط10، وهو نمط بتات النوع المطلوب. - الأرقام السداسية المتبقية هي الحمولة العشوائية.
يتحقق البرنامج الذي يقرأ UUID هذا من نمطي 4 و10 لتأكيد التنسيق، ثم يتعامل مع الباقي بوصفه قيمة عشوائية غير قابلة للتفسير.
إنشاء UUID من الإصدار 1. افترض أن الساعة تعرض 1,700,000,000,000 ميلي ثانية من وقت Unix، وهو ما يوافق 14 نوفمبر 2023، 22:13:20 بالتوقيت العالمي المنسق.
- أضف الإزاحة: 1,700,000,000,000 + 12,219,292,800,000 = 13,919,292,800,000 ميلي ثانية.
- اضرب في 10,000 للحصول على فواصل طول كل منها 100 نانوثانية: 139,192,928,000,000,000. وبالنظام السداسي تساوي
01EE833B04AFC000. - اقتطعها:
time_low=04AFC000(أدنى 8 أرقام سداسية)، وtime_mid=833B(الأرقام التالية وعددها 4)، أما البتات العليا وعددها 12 فهي1EE. - ضع رقم الإصدار
1أمام1EE، لتحصل علىtime_hi_and_version=11EE.
يصبح UUID عندئذ 04afc000-833b-11ee- متبوعًا بتسلسل الساعة وقيمة العقدة. ويمكن للبرمجيات عكس هذه الخطوات الأربع لاسترجاع 14 نوفمبر 2023 من المعرّف.
الاستخدامات الشائعة لـ UUIDs
- تُستخدم المفاتيح الأساسية في قواعد البيانات، ولا سيما في الحالات التي تنشئ فيها خوادم متعددة سجلات في الوقت نفسه من دون التنسيق فيما بينها.
- رموز الجلسات ومفاتيح API، وعادةً ما يكون الإصدار 4 لما يوفّره من خصوصية.
- معرّفات الملفات والأحداث والموارد في الأنظمة الموزعة، مثل الخدمات المصغّرة.
- معرّفات الأجهزة في شبكات إنترنت الأشياء الكبيرة، حيث يستطيع كل جهاز إنشاء معرّفه دون اتصال.
المفاضلة الرئيسية هي الحجم: يحتاج UUID إلى 16 بايتًا من التخزين، مقارنةً بـ4 أو 8 بايتات لعداد صحيح بسيط، كما تفهرس بعض قواعد البيانات UUIDs ببطء أكبر من الأعداد الصحيحة المتسلسلة.
بدائل UUIDs
الأعداد الصحيحة ذات الزيادة التلقائية أصغر وأبسط، لكنها لا تعمل جيدًا عندما يحتاج أكثر من خادم إلى توزيع المعرّفات مستقلًا. وتجمع معرّفات Snowflake، التي طورتها Twitter، بين طابع زمني ومعرّف عامل لإنتاج معرّفات موجزة قابلة للفرز ضمن نظام موزّع. أما ULIDs (المعرّفات الفريدة عالميًا والقابلة للفرز معجميًا) فهي تنسيق أحدث صُمم ليكون عشوائيًا وقابلًا للفرز بحسب وقت الإنشاء، بخلاف UUID قياسي من الإصدار 4.
تاريخ معيار UUID
بدأ مفهوم UUID في عقد 1980 من القرن العشرين لدى شركة Apollo Computer، بوصفه جزءًا من نظام Network Computing System. واعتمدت مؤسسة البرمجيات المفتوحة لاحقًا التنسيق لبيئة الحوسبة الموزعة التابعة لها. ونشرت فرقة عمل هندسة الإنترنت RFC 4122 في (10,500 سم) 2005، ثم استبدلته بـRFC 9562 في مايو 2024. ويحافظ RFC 9562 على عمل كل إصدار سابق دون تغيير، ويضيف الإصدارات 6 و7 و8.
الأسئلة الشائعة
فيمَ يُستخدم مولّد UUID؟ ينشئ معرّفات فريدة لقواعد البيانات والأنظمة الموزعة ورموز الجلسات ومفاتيح API ومعرّفات الأجهزة، بحيث لا تحتاج أي سجلات إلى مشاركة المعرّف نفسه.
ما الفرق بين UUID v1 وv4؟ يشفّر الإصدار 1 طابعًا زمنيًا يمكن للبرمجيات قراءته لاسترجاع وقت الإنشاء. أما الإصدار 4 فعشوائي بالكامل ولا يحمل طابعًا زمنيًا. ويستخدم ناتج الإصدار 1 في هذه الأداة قيمة عقدة مولّدة عشوائيًا بدلًا من عنوان MAC حقيقي، لذلك لا يكشف معلومات تحدد الجهاز أيضًا.
هل يكشف الإصدار 1 عنوان MAC الخاص بي؟ ليس مع هذه الأداة. يسمح المعيار بأن يحتوي حقل العقدة في UUID من الإصدار 1 على عنوان MAC حقيقي، لكن هذا المولّد يملأ الحقل دائمًا ببتات عشوائية ويضبط البت الذي يحدد أن القيمة ليست عنوان شبكة حقيقيًا.
هل UUIDs مضمونة التفرد؟ لا يمكن لأي مخطط للمعرّفات ضمان التفرد المطلق، لكن فضاء 128 بت يضم نحو 3.4 × 10^38 قيمة ممكنة، ويضم UUID من الإصدار 4 نحو 5.3 × 10^36 قيمة عشوائية ممكنة. واحتمال التكرار ضئيل بما يكفي لتجاهله في أي استخدام عملي تقريبًا.
هل يمكنني استخدام UUID مفتاحًا أساسيًا لقاعدة بيانات؟ نعم. تعمل UUIDs جيدًا بوصفها مفاتيح أساسية في الأنظمة الموزعة، لأن أي عقدة تستطيع إنشاء واحد منها دون الرجوع إلى خادم مركزي. وتتمثل الكلفة في 16 بايتًا من التخزين لكل مفتاح، وهي أكبر من كلفة العدد الصحيح المعتاد، مع احتمال بطء أداء الفهرس في الجداول الكبيرة جدًا.
هل UUID هو نفسه GUID؟ نعم. GUID (المعرّف الفريد عالميًا) هو تسمية Microsoft للمفهوم نفسه الذي يعرّفه RFC 4122 باسم UUID.
هل يمكن فرز UUIDs من الإصدار 4 حسب وقت الإنشاء؟ لا. UUIDs من الإصدار 4 عشوائية، لذلك لا تحمل سجلًا يبين وقت إنشائها. ويحمل UUID من الإصدار 1 هذا السجل، لكن يجب فك ترميزه أولًا؛ إذ لا يؤدي فرز النص إلى ترتيب الإنشاء. وقد صُمم الإصداران 6 و7 وULIDs للفرز مباشرة بوصفها نصًا.
المراجع
- Davis, K., Peabody, B., & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- المعرّف الفريد عالميًا. في Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- معرّف Snowflake. في Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- مواصفة ULID. GitHub. https://github.com/ulid/spec