مولد ULID و Nano ID
ولّد معرّفات ULID (مع وضع رتيب) أو Nano ID بأبجدية وطول مخصّصين دفعةً واحدة، وفك ترميز تاريخ ULID، وقدّر خطر التصادم.
احتمال التصادم
- حجم الأبجدية
- —
- الإنتروبيا لكل معرّف
- —
- عدد المعرّفات الممكنة
- —
- عدد المعرّفات لبلوغ احتمال تكرار 1%
- —
- الوقت اللازم لبلوغ خطر 1%
- —
فك ترميز ULID
- الطابع الزمني (UTC، ISO 8601)
- التاريخ والوقت المحليان
- وقت يونكس (ms)
- الجزء العشوائي (80 بت، ست عشري)
كيف تولّد معرّفات ULID أو Nano ID
- من نوع المعرّف، اختر ULID (قابل للترتيب) أو Nano ID (قصير).
- حدّد العدد (من 1 إلى 1000). تولّد هذه الأداة عشرة معرّفات فور تحميل الصفحة.
- مع ULID، أبقِ خيار رتيب (تصاعدي تمامًا) مفعّلًا لكي تبقى المعرّفات المولّدة في الملّي ثانية نفسها مرتّبة، وفعّل أحرف صغيرة إن كان نظامك يفضّلها.
- مع Nano ID، اختر الأبجدية (أو مخصّصة… واكتب أحرفك الخاصة) ثم الطول.
- انقر توليد، ثم نسخ القائمة أو تنزيل ملف .txt (معرّف واحد في كل سطر).
لقراءة التاريخ المخفي داخل ULID، الصقه في قسم فك ترميز ULID أو انقر فك ترميز المعرّف الأول. تعرض الأداة الطابع الزمني بتوقيت UTC (بصيغة ISO 8601)، وبتوقيتك المحلي، وبملّي ثواني يونكس، إضافةً إلى الجزء العشوائي ذي الـ80 بت بالنظام الست عشري.
ما هو ULID؟
ULID (اختصار Universally Unique Lexicographically Sortable Identifier، أي معرّف فريد عالميًا قابل للترتيب أبجديًا) هو معرّف بطول 128 بت يُكتب في 26 حرفًا بترميز Crockford Base32، مثل 01ARZ3NDEKTSV4RRFFQ69G5FAV. تمثّل الأحرف العشرة الأولى طابعًا زمنيًا من 48 بت بالملّي ثانية (يكفي حتى عام 10889)، أما الأحرف الستة عشر الأخيرة فهي 80 بت عشوائية. يستبعد ترميز Crockford Base32 الأحرف I و L و O و U لتجنّب الالتباس، وفك الترميز لا يميّز بين الأحرف الكبيرة والصغيرة.
ولأن الوقت يأتي أولًا، تُرتَّب معرّفات ULID أبجديًا بحسب ترتيب إنشائها. وهذا يجعلها مفاتيح أساسية ممتازة في قواعد البيانات: تُضاف الصفوف الجديدة إلى نهاية فهرس B-tree بدل أن تتبعثر كما يحدث مع UUID العشوائية، ويمكنك الترتيب بحسب المعرّف بدل عمود تاريخ منفصل.
الوضع الرتيب. داخل الملّي ثانية الواحدة، تُرتَّب معرّفات ULID العشوائية ترتيبًا عشوائيًا. مع الخيار الرتيب، تتبع الأداة مواصفة ULID: عند إنشاء عدة معرّفات في الملّي ثانية نفسها، تحتفظ بالطابع الزمني وتضيف 1 إلى الجزء العشوائي السابق. وإذا رجعت الساعة إلى الوراء، تحتفظ بآخر طابع زمني، فلا تتناقص السلسلة أبدًا.
تذكّر أن ULID يكشف وقت إنشائه، فلا تستخدمه حيث تكون هذه المعلومة حساسة.
ما هو Nano ID؟
Nano ID معرّف عشوائي مضغوط. الإعداد الافتراضي 21 حرفًا من أبجدية آمنة للروابط تضم 64 حرفًا (A–Z a–z 0–9 _ -)، ما يعطي 126 بت عشوائية، أي ما يقارب UUID v4 (بـ122 بت) بعدد أحرف أقل. يمكنك اختيار الأبجدية الست عشرية، أو الأرقام فقط، أو الحروف الصغيرة والأرقام، أو الحروف والأرقام، أو مجموعة خالية من الأحرف المتشابهة (لا 0/O ولا 1/l/I ولا 5/S…) للرموز التي يكتبها الناس يدويًا، أو أبجديتك الخاصة من 2 إلى 256 حرفًا. تُحذف الأحرف المكرّرة في الأبجدية المخصّصة لأنها تجعل بعض الأحرف أكثر احتمالًا من غيرها.
يُسحب كل حرف باستخدام crypto.getRandomValues مع أخذ العيّنات بالرفض (rejection sampling)، فلا يوجد انحياز ناتج عن عملية باقي القسمة (modulo).
احتمال التصادم
تطبّق لوحة احتمال التصادم حدّ مفارقة عيد الميلاد. مع أبجدية حجمها A وطول L، يوجد N = A^L معرّفًا ممكنًا. بعد توليد k معرّفًا، يكون احتمال وجود تكرار واحد على الأقل نحو 1 − e^(−k²/2N)، لذا يُبلَغ خطر 1% بعد k ≈ √(2N · ln(1/0.99)) معرّفًا. أدخل عدد المعرّفات المولّدة في الساعة لترى كم يستغرق ذلك. بالإعدادات الافتراضية ومعدّل 1000 معرّف في الساعة، يحتاج بلوغ خطر 1% إلى نحو 149 مليار سنة؛ أما مع 8 أحرف ست عشرية فيكفي نحو 9300 معرّف فقط.
الأسئلة الشائعة
أيّهما أختار: ULID أم UUID؟
كلاهما بطول 128 بت. ULID أقصر في الكتابة (26 حرفًا بدل 36) ويُرتَّب بحسب الوقت. أما UUID الإصدار 7 فيوفّر الآن الترتيب الزمني نفسه بصيغة UUID القياسية التي تخزّنها قواعد البيانات غالبًا بشكل أصلي. اختر UUID v7 إن كانت بيئتك تدعمه، و ULID إن أردت سلسلة مضغوطة سهلة القراءة.
هل معرّفات ULID و Nano ID آمنة بما يكفي لاستخدامها رموزًا سرّية؟
يحتوي Nano ID بالأبجدية والطول الافتراضيين على 126 بت عشوائية من مولّد تشفيري، وهذا يكفي لروابط لا يمكن تخمينها. أما ULID فلا يحتوي إلا على 80 بت عشوائية، وفي الوضع الرتيب يختلف المعرّفان المتتاليان بمقدار 1 فقط، لذا لا تستخدم ULID كسرّ.
هل يمكنني تقصير Nano ID؟
نعم، لكن خطر التصادم يرتفع بسرعة كبيرة. راجع قيمة عدد المعرّفات لبلوغ احتمال تكرار 1% لطولك وأبجديتك قبل الاعتماد على معرّف قصير.
لماذا ترفض أداة فك الترميز معرّف ULID الخاص بي؟
يجب أن يتكوّن ULID من 26 حرفًا بالضبط، وألّا يستخدم إلا أحرف Crockford Base32، وأن يبدأ بحرف بين 0 و 7 (فالحرف الأول الأكبر من ذلك يتجاوز 128 بت).
هل تُخزَّن المعرّفات أو تُرسَل إلى أي مكان؟
لا. تُولَّد في متصفحك وتختفي عند مغادرتك الصفحة.
أدوات ذات صلة
- مولد UUID مولد UUID مجاني للإصدارين 4 و7. أنشئ حتى 1000 معرّف دفعةً واحدة، بأحرف كبيرة أو دون شرطات، ثم انسخها أو نزّلها كملف .txt.
- مولّد كلمات المرور مولّد كلمات مرور مجاني ينشئ كلمات سر قوية وعشوائية من 4 إلى 128 حرفًا في متصفحك بمولّد أرقام آمن. لا يُخزَّن أي شيء ولا يُرسل.
- محول الطابع الزمني يونكس حوّل الطابع الزمني يونكس بالثواني أو بالملّي ثانية إلى تاريخ مقروء بالتوقيت المحلي و UTC و ISO 8601، وحوّل أي تاريخ إلى وقت epoch.