مولد معرّفات ULID

قم بتوليد معرّفات ULID عبر الإنترنت: معرّفات مكونة من 26 محرفًا بنظام Crockford Base32 مع طابع زمني بدقة 48 بت و80 بت من العشوائية.

شكل
المعرفات التي تم إنشاؤها
جاهز. قم بتوليد معرّفات ULID في متصفحك مباشرةً.

كيف يتم بناء هذا المعرّف

التخطيط والتركيبة
26 محرفًا بنظام Crockford Base32: تشمل 10 محارف للوقت تليها 16 محرفًا عشوائيًا.
الإنتروبيا
80 بت عشوائية تلي الطابع الزمني المكون من 48 بت والمقاس بالملي ثانية.
الوقت
نعم. تشفر المحارف العشرة الأولى وقت الإنشاء بالملي ثانية، ويكون الترتيب الأبجدي متوافقًا مع الترتيب الزمني.
احتمالية التصادم
يحتوي الجزء العشوائي الأخير على 80 بت؛ ويتعلق خطر التداخل بشكل أساسي بعدد المعرّفات التي تقوم بإنشائها في نفس الميلي ثانية.
مثال
01M12BRP3G4NW5023JA8DNVMQG

يتم إنشاء معرفاتك محليًا باستخدام عشوائية قوية في المتصفح. لا يتم إرسال أي شيء إلى BroBroGo.

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

ما هي فوائد استخدام ULID؟

تتميز معرّفات ULID بأنها مدمجة، وصديقة لعناوين URL، وقابلة للفرز الزمني كنصوص عادية، مما يجعلها مثالية لسجلات الأحداث (logs) ومفاتيح الكائنات وقواعد البيانات التي تتطلب الفرز حسب وقت الإنشاء.

هل ULID هو نفسه UUID v7؟

لا. على الرغم من أن كليهما يتضمن طابعًا زمنيًا بالملي ثانية، إلا أن ULID يستخدم نظام Crockford Base32 ويتكون من 26 محرفًا، بينما يحتفظ UUID v7 بالشكل الست عشري القياسي لمعرّفات UUID.

أداة توليد ULID: المعرفات الزمنية القابلة للفرز والمختصرة

على عكس معظم أدوات توليد المعرفات التي تتعامل مع UUID فقط، تركز هذه الصفحة تحديداً على صيغة ULID – وهي معرف أقصر من UUID (26 حرفاً بدلاً من 36) ويخلو من الواصلات، مع استخدام أبجدية Crockford's base32 التي تجعل الأحرف غير حساسة لحالة الكتابة (case-insensitive) وآمنة تماماً للاستخدام في عناوين URL دون حاجة إلى ترميز. الميزة الأهم هي أن ULID قابل للفرز معجمياً (lexicographically sortable) بحسب زمن الإنشاء، لأن الأحرف العشرة الأولى تشفر طابعاً زمنياً بدقة المللي ثانية. تتيح لك الأداة اختيار عدد المعرفات بين 1 و100، ثم تضغط زراً واحداً لتحصل على قائمة جاهزة للنسخ، فردياً أو جماعياً، وكل شيء يجري في متصفحك دون إرسال أي بيانات إلى خادم.

ما هي بنية ULID الداخلية؟

ULID هو معرف بطول 128 بت، مقسم إلى جزئين: (1) طابع زمني (timestamp) طوله 48 بت يمثل عدد المللي ثانية المنقضية منذ عهد اليونكس (Unix epoch)، و(2) مكون عشوائي (random component) طوله 80 بت. يتم ترميز الـ128 بت باستخدام أبجدية Crockford's base32، التي تتكون من 32 حرفاً: الأرقام 0-9 والحروف اللاتينية الكبيرة A-Z باستثناء الأحرف I وL وO وU (لتفادي الالتباس البصري مع الأرقام 1 و0). النتيجة هي سلسلة نصية ثابتة الطول من 26 حرفاً، مثل 01BX5ZZKBKACTAV9WEVGEMMVRY. الأحرف العشرة الأولى تمثل الطابع الزمني، والـ16 حرفاً التالية تمثل الجزء العشوائي. لأن الأبجدية غير حساسة لحالة الحرف (يمكن كتابتها بأحرف صغيرة أو كبيرة بلا فرق)، فإن المعرفات تكون متسامحة مع أخطاء الإدخال اليدوي.

لماذا تختار ULID بدلاً من UUID؟

مقارنة مباشرة بين UUID الإصدار 4 (العشوائي) وULID:

الخاصية UUID v4 ULID
الطول النصي 36 حرفاً (مع 4 واصلات) 26 حرفاً (بدون واصلات)
حساسية حالة الأحرف نعم (عادة بصيغة سداسية عشرية صغيرة) لا (غير حساس للحالة)
الفرز الزمني لا (عشوائي كلياً) نعم (حسب زمن الإنشاء)
أمان URL يحتاج ترميز % في بعض الحالات آمن تماماً (جميع الأحرف غير محجوزة في RFC 3986)
التمثيل البتّي 128 بت 128 بت
كثافة المعلومات 3.56 بت لكل حرف (سداسي عشري) 5 بت لكل حرف (base32)

الفرق الأهم بالنسبة لمطوري قواعد البيانات هو أن ULID يولد معرفات متزايدة تقريباً مع مرور الوقت (monotonically increasing)، مما يحسن أداء الفهرسة في B‑tree مقارنة بـUUID العشوائي الذي يسبب تجزؤاً كبيراً. بالنسبة لمهندسي الأنظمة الموزعة، فإن طابع الزمن المضمن يتيح ترتيب الأحداث دون الحاجة إلى عمود زمني منفصل.

كيف تعمل أداة التوليد على هذه الصفحة؟

تقدم الصفحة واجهة بسيطة: اختيار الصيغة (مثبتة على ULID)، حقل لإدخال عدد المعرفات (بين 1 و100)، وزر للتوليد. بعد الضغط، تظهر قائمة بالمعرفات المطلوبة، مع رسالة حالة "تم التوليد" (Generated). تغيير أي خيار يؤدي إلى إعادة توليد القائمة بالكامل. يمكن نسخ كل معرف فردي بالنقر عليه، أو نسخ القائمة كلها مرة واحدة مما يظهر رسالة "تم نسخ الكل!" (Copied all!). لا توجد أزرار لتبديل حالة الحروف أو إضافة واصلات، لأن ULID بطبيعته غير حساس للحالة ولا يحتوي على واصلات.

تعتمد الأداة على crypto.getRandomValues() في المتصفح لتوليد الجزء العشوائي (80 بت)، وهو مصدر قوي للعشوائية الإحصائية المناسب للتطبيقات الأمنية. جميع العمليات تجري محلياً في متصفحك، ولا ترسل أي بيانات إلى أي خادم – مما يحافظ على الخصوصية.

قيود الفرز الزمني واحتمال التصادم

رغم أن ULID قابل للفرز حسب زمن الإنشاء، إلا أن هذه الصفة ليست مضمونة للمعرفات المولدة في نفس المللي ثانية. إذا تم إنشاء معرفين في نفس المللي ثانية، فإن الترتيب بينهما يعتمد على الجزء العشوائي، وليس بالضرورة أن يعكس ترتيب الإنشاء الفعلي داخل تلك المللي ثانية. هذا مقبول في معظم التطبيقات التي تحتاج فرزاً زمنياً تقريبياً.

احتمال التصادم (توليد معرفين متطابقين) يعتمد على طول الجزء العشوائي (80 بت) ومعدل التوليد. مع 80 بت عشوائي، يكون احتمال التصادم ضئيلاً جداً حتى عند توليد ملايين المعرفات. نظرياً، بعد توليد نحو 2^40 (أكثر من تريليون) معرف، يصل احتمال حدوث تصادم واحد إلى 50% تقريباً – وهو رقم لا تبلغه معظم التطبيقات.

من يحتاج إلى هذه الأداة؟

  • مطورو الويب والتطبيقات الذين يريدون معرفات أقصر من UUID، آمنة لـ URL، وقابلة للفرز حسب الزمن دون عمود إضافي.
  • مسؤولو قواعد البيانات الذين يصممون مفاتيح أساسية تحسن أداء عمليات الإدراج في جداول B‑tree بفضل الزيادة الرتيبة.
  • مهندسو الأنظمة الموزعة الذين يحتاجون معرفات فريدة عبر عقد متعددة مع إمكانية ترتيبها زمنياً، مع حجم نصي مضغوط.
  • مصممو واجهات برمجة التطبيقات (API) الذين يرغبون في معرفات عامة يصعب تخمينها ولكنها سهلة الاستخدام البشري (لا التباس بين الأحرف الكبيرة والصغيرة، ولا شرطات).
  • أي شخص يجد UUID طويلاً وصعب التعامل به، ويريد بديلاً يحافظ على مساحة 128 بت ولكن بتمثيل أصغر حجماً.

الأسئلة الشائعة (FAQ)

س: هل يمكن استخدام ULID في البيئات الحساسة للأمان؟
ج: نعم، الجزء العشوائي (80 بت) يولّد باستخدام crypto.getRandomValues() الذي يعد مصدراً قوياً للعشوائية، وهو مناسب للتطبيقات التي تتطلب عدم قابلية التخمين (مثل رموز الجلسات).

س: ماذا يحدث إذا اخترت عدداً أكبر من 100؟
ج: الأداة تقبل فقط الأعداد بين 1 و100 شاملة؛ أي قيمة خارج هذا النطاق يتم رفضها.

س: هل يمكنني استخدام الأحرف الصغيرة في ULID؟
ج: نعم، ULID غير حساس لحالة الأحرف، لذا 01bx5zzkbkactav9wevgemmvry يعادل المعرف نفسه تماماً. لكن المخرجات القياسية من الأداة تكون بأحرف كبيرة.

س: كيف أعرف أن المعرفات تولدت محلياً وليس على الخادم؟
ج: الأداة تعمل كلياً في متصفحك باستخدام واجهة crypto.getRandomValues()، ولا يوجد أي اتصال بخادم لتوليد المعرفات. يمكنك التحقق من ذلك عبر أدوات المطورين في المتصفح.

س: هل يمكن فرز معرفات ULID في قاعدة البيانات كأعمدة نصية؟
ج: نعم، لأن ULID يبدأ بالطابع الزمني المشفر بنظام base32، فإن الفرز المعجمي (lexicographic) يعطي ترتيباً زمنياً صحيحاً، شرط أن تكون جميع المعرفات مكتوبة بنفس حالة الأحرف (يفضل استخدام الأحرف الكبيرة باستمرار).

س: ما الفرق بين ULID وUUID الإصدار 7؟
ج: UUID v7 هو معيار حديث (RFC 9562) يستخدم أيضاً طابعاً زمنياً مدته 48 بتاً، لكن تمثيله النصي يبقى 36 حرفاً مع واصلات، وهو حساس لحالة الأحرف (سداسي عشري). ULID أقصر وأسهل للاستخدام اليدوي.

خلاصة

تقدم هذه الصفحة طريقة فورية ومحلية لتوليد معرفات ULID بأي عدد بين 1 و100، مع مخرجات جاهزة للنسخ. تصميم الأداة يقتصر على ما يحتاجه المستخدم: اختيار الصيغة، تحديد العدد، ثم الحصول على المعرفات. لا توجد خيارات زائدة قد تربك المبتدئين، لأن صيغة ULID نفسها تحدد خصائصها بشكل واضح. سواء كنت مطوراً يبني نظاماً موزعاً أو مسؤول قاعدة بيانات يحسن أداء الفهرسة، فإن هذه المعرفات المختصرة والقابلة للفرز توفر حلاً عملياً مباشراً.