مولّد UUID
ولّد معرّفات UUID من الإصدارات v4 وv7 وv1 دفعة واحدة، حتى 10,000 معرّف في المرة، أو فك ترميز معرّف موجود لمعرفة إصداره ومتغيّره وطابعه الزمني.
كيف تولّد معرّف UUID
- 1
اختيار إصدار UUID
اختر v4 للعشوائية الخالصة، أو v7 إن أردت معرّفات تُرتَّب حسب وقت إنشائها، أو v1 للبنية الكلاسيكية القائمة على الوقت. ويمنحك NIL وMAX القيمتين الثابتتين المحجوزتين.
- 2
تحديد العدد وطريقة التنسيق
ولّد حتى 10,000 معرّف في المرة. اختر الأحرف الكبيرة أو الصغيرة، وحدّد إن كانت الشرطات تبقى، وأحط كل قيمة بعلامات تنصيص أو أقواس معقوصة أو بالبادئة urn:uuid: للصقها في الكود مباشرة.
- 3
نسخ القائمة أو تنزيلها
انسخ كل القيم المولّدة إلى الحافظة بنقرة، أو نزّل الدفعة ملفًا نصيًا عاديًا أو ملف CSV. وتتضمن دفعات v1 وv7 عمودًا للطابع الزمني.
لماذا يحل v7 محل v4 في مفاتيح قواعد البيانات
معرّف UUID من الإصدار v4 هو 122 بت من العشوائية الخالصة. لذلك تصل دفعة منه إلى فهرس قاعدة البيانات بترتيب لا يمكن توقعه إطلاقًا، فتتبعثر عمليات الكتابة في أنحاء الفهرس ويتراجع الأداء عند الأحجام الكبيرة. أما معرّف v7 فيبدأ بطابع زمني بدقة الميلي ثانية طوله 48 بت، فتأتي المعرّفات المولّدة لاحقًا دائمًا بعد المولّدة قبلها في الترتيب. وبهذا تحصل على تقارب عمليات الكتابة الذي يوفره العدد الصحيح ذو الزيادة التلقائية، مع الاحتفاظ بمقاومة التصادم والتوليد اللامركزي اللذين يميزان UUID. تحافظ هذه الأداة على تزايد دفعات v7 حتى داخل الميلي ثانية الواحدة، إذ تستخدم البتات العليا من الجزء العشوائي عدّادًا.
لماذا لا يحتوي v1 هنا على عنوان MAC
التعريف الأصلي لإصدار UUID v1 عام 1993 كان يبني آخر 48 بت من عنوان MAC لبطاقة الشبكة، على افتراض أنه لا يتشارك جهازا كمبيوتر العنوان نفسه. هذا العنوان غير متاح في المتصفح، وحتى حيث يتاح فإن تضمين عنوان MAC حقيقي في كل صف من قاعدة البيانات تسريب يتيح تتبع الجهاز بحكم التصميم. لذلك يملأ هذا المولّد آخر 48 بت دائمًا ببايتات عشوائية ويضبط بت البث المتعدد (multicast)، كما يسمح RFC 9562 تمامًا. وهكذا تبقى ميزة الترتيب الزمني في v1 دون كشف أي معرّف للعتاد.
كل معرّف يُولَّد على جهازك
التوليد والتنسيق وفك الترميز كلها تجري في علامة التبويب هذه باستخدام Web Crypto API. لا يُرسل شيء إلى خادم، ولا يُكتب شيء في تخزين المتصفح. يصل إلى التحليلات حدث عام «ضُغط زر» مع الإصدار والعدد فقط، ولا تصل المعرّفات نفسها أبدًا.
الأسئلة الشائعة
ما الفرق بين UUID v4 وv7؟
الإصدار v4 هو 122 بت من العشوائية الخالصة بلا أي بنية. أما v7 فيخصص أول 48 بت لطابع زمني بدقة الميلي ثانية، فتُرتَّب دفعة من قيم v7 بالترتيب الذي أُنشئت به. وهذا مفيد للمفتاح الأساسي في قاعدة البيانات، مع بقاء قدر كافٍ من العشوائية لتجنب التصادم.
متى أستخدم v7 بدل v4 لمفاتيح قاعدة البيانات؟
استخدم v7 كلما صار المعرّف مفتاحًا أساسيًا أو عمودًا مفهرسًا: ترتيبه الزمني يُبقي الصفوف الجديدة متقاربة فعليًا في الفهرس، والإدراج بذلك أسرع بفارق يمكن قياسه من التبعثر العشوائي الذي ينتجه مفتاح v4. واستخدم v4 حين لا تدخل القيمة أي فهرس، كرمز يُستعمل مرة واحدة.
لماذا لا يحتوي v1 هنا على عنوان MAC؟
لا تستطيع المتصفحات قراءة عنوان MAC للجهاز، وحتى خارج المتصفح فإن تضمينه في كل معرّف مولّد يكشف أي جهاز فعلي أنشأه. لذلك تملأ هذه الأداة ذلك الجزء من UUID v1 ببايتات عشوائية بدلًا منه، وهو ما يسمح به RFC 9562 صراحة.
ما احتمال تصادم معرّفات UUID؟
في الإصدار v4، توليد مليار UUID في الثانية لمدة 85 عامًا تقريبًا يعطي احتمالًا بنحو 50% لتصادم واحد، وفي الواقع العملي لا يحدث ذلك. ويضيف v7 وv1 طابعًا زمنيًا فوق العشوائية، ما يجعل التصادم العرضي أقل احتمالًا أيضًا.
هل يمكنني استخدام UUID كلمةَ مرور أو رمز وصول؟
ليست فكرة جيدة. صحيح أن UUID من الإصدار v4 يحمل قدرًا معتبرًا من العشوائية، لكن صيغته متوقعة، والأدوات تتعامل معه كقيمة تبدو عامة، بخلاف الرمز المخصص ليبقى سريًا. استخدم مولّد كلمات المرور المخصص لكل ما يجب أن يبقى سرًا.
ما فائدة معرّفي NIL وMAX؟
القيمة NIL (كل البتات أصفار) هي القيمة المحجوزة التي تعني «لا معرّف» أو «غير محدد» في كثير من الأنظمة. أما MAX (كل البتات آحاد)، وقد عُرّف في وقت أحدث، فيُستخدم قيمةً حارسة تعني «أكبر من أي UUID حقيقي» في استعلامات النطاقات. لا يُولَّد أي منهما عشوائيًا، فهما ثابتان محددان.
من أين تأتي العشوائية؟
من الدالة crypto.getRandomValues في Web Crypto API، ومن crypto.randomUUID مباشرة للإصدار v4 حيث يدعمها المتصفح. لا تُستخدم Math.random في أي مكان من هذه الأداة.
هل يُرسَل UUID إلى أي مكان عند فك ترميزه؟
لا. يقرأ فك الترميز نصف بايت الإصدار وبتات المتغيّر، والطابع الزمني المضمّن في v1 وv7، داخل متصفحك بالكامل. القيمة التي تلصقها لا تغادر الصفحة.