Skip to content

مولّد ULID مجاني — توليد وفك ترميز

ولّد معرفات ULID وفك ترميزها وحوّلها أونلاين — مجاناً و100% في متصفّحك. استخرج الطابع الزمني المضمّن، وحوّل بين ULID وUUID، وولّد بالدُفعات بوضع رتيب. لا يُرسل شيء إلى أي خادم.

بدون تتبّع يعمل في المتصفّح مجاني
يُولَّد كل ULID محلياً بمولّد الأرقام العشوائية التعموي في متصفّحك (crypto.getRandomValues). لا يُرفع أو يُسجَّل أو يُخزَّن شيء.

يستخدم كل ULID عشوائية جديدة بدقة 80 بت.

ما هو ULID؟

ULID — المعرّف الفريد عالمياً القابل للفرز معجمياً — هو معرّف بحجم 128 بت أُنشئ لإصلاح ضعف عملي في UUIDv4 العشوائي مع الحفاظ على أفضل خصائصه: يمكنك توليد واحد في أي مكان، دون منسّق مركزي، وأنت واثق من تفرّده. الفرق هو أن ULID قابل للفرز حسب الوقت. يُعرض كـ 26 حرفاً من Crockford Base32، مقسومة إلى جزأين: الأحرف العشرة الأولى طابع زمني بدقة 48 بت يعدّ المللي ثانية منذ حقبة Unix، والأحرف الستة عشر الأخيرة 80 بت من العشوائية الآمنة تعمويّاً. ضع الوقت أولاً، ورمّزه بأبجدية تحافظ على الترتيب، فيُفرز المعرّف زمنياً كسلسلة نصية عادية.

لهذا الاختيار التصميمي الواحد عواقب هائلة على قواعد البيانات. يهبط مفتاح UUIDv4 العشوائي الأساسي في موضع غير متوقع في فهرس B-tree عند كل إدراج، مما يجزّئ الفهرس، ويرهق الذاكرة المؤقتة، ويتدهور بأداء الكتابة ببطء مع نمو الجدول. أما ULID، لأنه ذو بادئة وقت، فيهبط عند نهاية الفهرس أو قربها في كل مرة — تبقى الإدراجات متسلسلة، ويبقى الفهرس متراصاً، وتصبح فحوصات النطاق على نافذة زمنية رخيصة. تحصل على التوليد الخالي من التنسيق الخاص بـ UUID وعلى محلية الإدراج الخاصة بعدد صحيح متزايد تلقائياً، دون كشف عدّاد تسلسلي قابل للتخمين.

تفاصيل الترميز متعمَّدة. يستبعد Crockford Base32 الأحرف I وL وO وU، لتجنّب الالتباس البصري مع الرقمين 1 و0 ولجعل السلسلة غير حساسة لحالة الأحرف عند الإدخال. والنتيجة 26 حرفاً دون شرطات آمنة للوضع في رابط أو اسم ملف أو ترويسة طلب دون هروب — أقصر بوضوح من شكل UUID ذي 36 حرفاً بشرطات. لا ينفد الطابع الزمني بدقة 48 بت لمدة طويلة: يمكنه تمثيل تواريخ حتى العام 10889 قبل أن يفيض عدّاد المللي ثانية.

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

// Browser / Node with the `ulid` package
import { ulid, decodeTime } from 'ulid';

const id = ulid();          // e.g. 01KVT0F720ZK9N4T2QX7VR8WMC
const ts = decodeTime(id);  // 1782210600000  ->  2026-06-23T10:30:00.000Z

// Monotonic factory: strictly increasing within the same millisecond
import { monotonicFactory } from 'ulid';
const next = monotonicFactory();
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMC
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMD
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WME

الميزات الرئيسية

توليد وفك ترميز وتحويل في صفحة واحدة

تغطي ثلاث علامات تبويب سير عمل ULID بالكامل: سَكّ معرفات ULID جديدة، وفك ترميز معرّف موجود لقراءة طابعه الزمني، والتحويل بلا فقدان بين ULID وUUID. تكتفي معظم الأدوات المنافسة بالأولى فقط؛ هنا تعيش الرحلة الكاملة على صفحة واحدة.

مفكّك الطابع الزمني

الصق أي ULID واقرأ المللي ثانية الدقيقة التي أُنشئ فيها — معروضة بتوقيت UTC وبتوقيتك المحلي وكمللي ثانية خام لـ Unix — إضافة إلى مقطع العشوائية بدقة 80 بت. دقّق وقت سَكّ المعرّف دون استعلام لقاعدة بيانات.

تحويل ULIDUUID بلا فقدان

كلٌّ من ULID وUUID بحجم 128 بت، فالتحويل دقيق وقابل للعكس. تكتشف علامة تبويب التحويل أي تنسيق لصقت وتُنتج الآخر، مما يتيح لك الجسر بين ULID قابل للفرز وعمود أو واجهة API من نوع UUID دون فقدان بتة واحدة.

الوضع الرتيب

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

التوليد بالدُفعات

أنشئ حتى 50 معرّف ULID دفعة واحدة وانسخ المجموعة كلها بنسخ الكل. مثالي لتهيئة تجهيزات الاختبار أو الإدراجات بالجملة أو ملء جدول بحث دون النقر خمسين مرة.

طابع زمني مخصص

ضمّن لحظة محددة بدلاً من الآن — مفيد لبيانات اختبار حتمية أو لتأريخ السجلات بأثر رجعي أثناء عملية ترحيل مع الحفاظ على خاصية القابلية للفرز.

عشوائية آمنة تعمويّاً

تأتي البتات العشوائية الثمانون من crypto.getRandomValues، مولّد الأرقام العشوائية الآمن تعمويّاً في المتصفّح — وليس Math.random أبداً — فيكون كل ULID غير قابل للتنبؤ والتصادمات في نفس المللي ثانية غير محتملة للغاية.

خاص 100%، في المتصفّح فقط

يُولّد كل ULID ويُفكّ ترميزه ويُحوّل بالكامل على جهازك. لا طلبات شبكة، ولا تسجيل، ولا تخزين — تحقّق بنفسك في أدوات المطوّر ← الشبكة. لا تصل المعرفات أبداً إلى طرف ثالث.

أمثلة ULID

توليد ULID واحد

الوضع: قياسي · الكمية: 1
01KVT0F720ZK9N4T2QX7VR8WMC

يتكوّن ULID من 26 حرفاً من ترميز Crockford Base32. تُرمّز الأحرف العشرة الأولى طابعاً زمنياً بدقة 48 بت بالمللي ثانية، وتُرمّز الأحرف الستة عشر الأخيرة 80 بت من العشوائية الآمنة تعمويّاً المستمدة من crypto.getRandomValues. ولأن الطابع الزمني يأتي أولاً ويحافظ Base32 على ترتيب البايتات، فإن معرفات ULID المولّدة لاحقاً تُفرز دائماً بعد الأقدم كسلاسل نصية عادية — دون حاجة إلى فهرس منفصل. انقر على نسخ لأخذ القيمة؛ وانقر على توليد مرة أخرى للحصول على قيمة جديدة.

فك ترميز ULID لقراءة طابعه الزمني

01ARYZ6S41TSV4RRFFQ69G5FAV
الطابع الزمني (<bdi>UTC</bdi>): <bdi>2016-07-30T22:36:16.385Z</bdi> · العشوائية: <bdi>TSV4RRFFQ69G5FAV</bdi>

يعكس فك الترميز الأحرف العشرة الأولى إلى قيمة المللي ثانية بدقة 48 بت المضمّنة وقت الإنشاء — هنا 1469918176385 مللي ثانية، أي 2016-07-30T22:36:16.385Z. هذا هو المثال المرجعي من مواصفة ULID. تعرض علامة تبويب فك الترميز الطابع الزمني بتوقيت UTC وتوقيتك المحلي، وقيمة المللي ثانية الخام لـ Unix، ومقطع العشوائية بدقة 80 بت، حتى تتمكن من تدقيق وقت سَكّ المعرّف بدقة دون أي استعلام لقاعدة بيانات.

تحويل ULID إلى UUID

01KVT0F720ZK9N4T2QX7VR8WMC
019ef407-9c40-fcd3-5268-57e9f784728c

كلٌّ من ULID وUUID بحجم 128 بت بالضبط، لذا فالتحويل بلا فقدان وقابل للعكس تماماً — تُعاد البتات نفسها ترميزها فحسب من Crockford Base32 إلى ست عشري بشرطات. تكتشف علامة تبويب التحويل تلقائياً ما إذا كنت لصقت ULID أم UUID وتحوّل إلى الشكل الآخر. هذا يتيح لك تخزين معرفات ULID في عمود UUID أو تسليم ULID لنظام لا يفهم سوى UUID، ثم التحويل عكسياً عندما تحتاج إلى السلسلة القابلة للفرز مجدداً.

توليد معرفات ULID رتيبة بالدُفعات

الوضع: رتيب · الكمية: 3 (نفس المللي ثانية)
01KVT0F720ZK9N4T2QX7VR8WMC
01KVT0F720ZK9N4T2QX7VR8WMD
01KVT0F720ZK9N4T2QX7VR8WME

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

توليد ULID لتاريخ محدد

وقت مخصص: <bdi>2026-06-23 10:30:00 UTC</bdi>
01KVT0F720… (مكوّن الوقت 01KVT0F720)

اضبط طابعاً زمنياً مخصصاً فيضمّن المولّد تلك اللحظة بالضبط بدلاً من الآن، مع ملء العشوائية من مولّد أرقام عشوائية آمن. مكوّن الوقت ذو الأحرف العشرة لـ 2026-06-23T10:30:00.000Z هو 01KVT0F720. هذا مفيد لتهيئة بيانات اختبار حتمية ومرتبة زمنياً، أو لتأريخ السجلات بأثر رجعي أثناء عملية ترحيل مع الحفاظ على خاصية القابلية للفرز سليمة.

كيفية استخدام مولّد ULID

  1. 1

    اختر وضع التوليد

    يمنح الوضع القياسي كل ULID عشوائية جديدة بدقة 80 بت. يضمن الوضع الرتيب أن تكون معرفات ULID المنشأة داخل المللي ثانية نفسها متزايدة بصرامة — اختره للإدراجات عالية الإنتاجية حيث يجب أن يصمد الترتيب حتى بمعدلات أدنى من المللي ثانية.

  2. 2

    اضبط الكمية وحالة الأحرف و(اختيارياً) وقتاً مخصصاً

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

  3. 3

    ولّد وانسخ

    انقر على توليد ULID. استخدم نسخ على أي قيمة مفردة، أو نسخ الكل لأخذ الدُفعة كلها كنص مفصول بأسطر جاهز للصق في الشيفرة أو ملف بذور أو جدول بيانات.

  4. 4

    فك ترميز ULID لقراءة طابعه الزمني

    في علامة تبويب فك الترميز، الصق أي ULID لاستخراج طابع الإنشاء الزمني بدقة 48 بت بتوقيت UTC والتوقيت المحلي، وقيمة المللي ثانية الخام لـ Unix، والعشوائية بدقة 80 بت — بالكامل في متصفّحك، دون أي استعلام.

  5. 5

    حوّل بين ULID وUUID

    في علامة تبويب ULIDUUID، الصق ULID أو UUID؛ تكتشف الأداة المدخل تلقائياً وتحوّل إلى التنسيق الآخر بلا فقدان. خزّن معرفات ULID في أعمدة UUID، أو سلّم ULID لنظام لا يقبل سوى UUID ثم حوّل عكسياً عندما تحتاج إلى السلسلة القابلة للفرز.

Common Errors

معاملة معرفات ULID من نفس المللي ثانية كمرتبة

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

✗ خطأ
الوضع القياسي، 3 معرفات في مللي ثانية واحدة  ←  الترتيب داخل المللي ثانية عشوائي
✓ صحيح
الوضع الرتيب، 3 معرفات في مللي ثانية واحدة  ←  …WMC < …WMD < …WME

توقّع أن يكون ULID المحوّل UUIDv4 صالحاً

يعيد تحويل ULID إلى شكل UUID ترميز الـ 128 بت نفسها؛ ولا يضبط حقلَي الإصدار والمتغير في UUID. النتيجة سلسلة UUID صالحة بحجم 128 بت لكنها لن تُبلِغ كإصدار 4 أو 7 إن فحصت مكتبة تلك البتات.

✗ خطأ
uuid.version(ulidToUuid(id))  ←  ليس 4 (البتات هي بتات الـ ULID)
✓ صحيح
عامله كقيمة غامضة بحجم 128 بت، أو ولّد UUIDv7 حقيقياً بدلاً من ذلك

استخدام الأحرف الصغيرة i وl وo في ULID يدوياً

يستبعد Crockford Base32 الأحرف I وL وO وU. تعيّن مفككات الترميز I وL إلى 1 وO إلى 0، لكن كتابة تلك الأحرف يدوياً في ULID عرضة للخطأ. انسخ معرفات ULID بدلاً من إعادة كتابتها.

✗ خطأ
01ARYZ6S41TSV4RRFFQ69G5FAO  ←  حرف O ملتبس
✓ صحيح
01ARYZ6S41TSV4RRFFQ69G5FAV  ←  أحرف مرجعية فقط

فيمَ تُستخدم معرفات ULID

مفاتيح أساسية لقاعدة البيانات تبقى مفروزة
استخدم معرفات ULID كمفاتيح أساسية لتحصل على التوليد الخالي من التنسيق الخاص بـ UUID مع محلية الإدراج الخاصة بعدد صحيح متزايد تلقائياً. ولأنها ذات بادئة وقت، تُلحَق الصفوف الجديدة قرب نهاية فهرس B-tree بدلاً من التبعثر مثل UUIDv4، مما يبقي الإدراجات سريعة والفهرس متراصاً مع نمو الجدول.
أنظمة موزعة دون تسلسل مركزي
ولّد معرفات على أي عقدة — خدمة أو عامل طرفي أو عميل — دون عدّاد مشترك ودون تنسيق تصادم، ومع ذلك افرز كل شيء حسب وقت الإنشاء لاحقاً. تمنح معرفات ULID الخدمات المصغرة مفتاحاً فريداً مرتباً دون رحلة ذهاب وإياب إلى قاعدة البيانات لتخصيصه.
سجلات الأحداث ومعرفات الرسائل
اختم الأحداث أو أسطر السجل أو رسائل الصفوف بمعرفات ULID رتيبة لتبقى في ترتيب زمني صارم حتى عندما يُنتج كثير منها داخل المللي ثانية نفسها. يصبح فحص نطاق نافذة زمنية مجرد مقارنة سلاسل نصية بسيطة.
معرفات عامة آمنة للروابط
ULID هو 26 حرفاً دون شرطات وبأبجدية آمنة للروابط، فيندرج في مسار أو اسم ملف أو ترويسة دون هروب وهو أقصر من UUID ذي 36 حرفاً. فك ترميز الطابع الزمني المضمّن لاحقاً لمعرفة وقت إنشاء المورد.
جسر إلى نظام لا يقبل سوى UUID
أتعمل مع عمود قاعدة بيانات أو واجهة API تقبل معرفات UUID فقط؟ ولّد معرفات ULID قابلة للفرز، وحوّلها إلى شكل UUID للتخزين أو النقل، وحوّل عكسياً عندما تحتاج إلى السلسلة المتراصة القابلة للفرز — تُحفظ قيمة الـ 128 بت بالضبط في كلا الاتجاهين.
تجهيزات اختبار حتمية
هيّئ الاختبارات بمعرفات ULID عند طوابع زمنية مختارة باستخدام خيار الوقت المخصص، فتكون التجهيزات قابلة للتكرار ومرتبة زمنياً مسبقاً. فك ترميزها في التأكيدات للتحقق من وقت الإنشاء الذي سجّلته شيفرتك.

كيف تعمل معرفات ULID

تخطيط 128 بت: 48 بت للوقت + 80 بت للعشوائية
ULID هو 128 بت بالضبط. الـ 48 بت العليا طابع زمني لـ Unix بالمللي ثانية؛ والـ 80 بت السفلى عشوائية. مُرمّزة في Crockford Base32 بمعدل 5 بتات لكل حرف، أي 10 أحرف للوقت و16 للعشوائية — 26 حرفاً إجمالاً. يكون الحرف الأول دائماً 7 أو أقل لأن الـ 48 بت لا تملأ مجموعة الـ 5 بتات العليا.
ترميز Crockford Base32
تستخدم معرفات ULID أبجدية Crockford Base32 (0-9 وA-Z باستثناء I وL وO وU). يتجنّب إسقاط تلك الأحرف الأربعة الالتباس مع الرقمين 1 و0 ويتيح لمفككات الترميز معاملة السلسلة دون حساسية لحالة الأحرف، بتعيين I وL إلى 1 وO إلى 0 عند الإدخال. الأبجدية مرتبة، وهذا ما يجعل السلسلة المرمّزة تُفرز بنفس طريقة البتات الأساسية.
القابلية للفرز المعجمي
لأن الطابع الزمني هو المكوّن الأكثر أهمية وتحافظ أبجدية Base32 على الترتيب، تُنتج مقارنة معرّفَي ULID كسلاسل نصية نفس نتيجة مقارنة قيمتيهما بدقة 128 بت، التي تُنتج نفس نتيجة مقارنة وقتَي إنشائهما. هذا ما يتيح لـ ORDER BY عادي أو فرز مصفوفة إنتاج ترتيب زمني دون أي فهرس إضافي.
الرتابة داخل المللي ثانية
يُبقي خيار الرتابة في مواصفة ULID الترتيب ثابتاً للمعرفات المسكوكة في المللي ثانية نفسها: تُولّد عشوائية أول معرّف في مللي ثانية بشكل طبيعي، ويكون كل معرّف لاحق في تلك المللي ثانية هو القيمة العشوائية السابقة زائد واحد. تنفّذ هذه الأداة ذلك بزيادة العشوائية بدقة 80 بت كعدد صحيح كبير النهاية.
عشوائية آمنة عبر crypto.getRandomValues
تُملأ البتات العشوائية الثمانون من crypto.getRandomValues، مولّد الأرقام العشوائية الآمن تعمويّاً في Web Crypto، وليس Math.random. مع 80 بت من الإنتروبيا، يبقي توليد حتى ملايين معرفات ULID في المللي ثانية نفسها احتمال التصادم صغيراً للغاية.
ULIDUUID إعادة ترميز خالصة
لا يغيّر التحويل بين ULID وUUID أي بتات — يعيد ترميز الـ 128 بت نفسها من Crockford Base32 إلى ست عشري بشرطات أو العكس. ونتيجةً لذلك تكون الرحلة الذهاب-إياب دقيقة: ULID محوّل إلى UUID وعكسياً مطابق بايتاً ببايت للأصل. لاحظ أن بايتات ULID لا تضبط حقلَي الإصدار والمتغير في UUID، فيكون UUID الناتج قيمة صالحة بحجم 128 بت لكنه ليس UUIDv4 أو v7 موسوماً بإصدار.

أفضل ممارسات ULID

استخدم الوضع الرتيب للإدراجات عالية الإنتاجية
إن كان نظامك يستطيع إنشاء أكثر من معرّف واحد لكل مللي ثانية وتعتمد على الترتيب، ولّد معرفات ULID رتيبة. معرفات ULID العادية غير مرتبة داخل المللي ثانية؛ أما الرتيبة فمتزايدة بصرامة، فتبقى الدُفعة مفروزة مهما سَككتها بسرعة.
خزّن معرفات ULID بشكل متراص
ULID هو 128 بت — خزّنه كـ 16 بايت ثنائية أو في عمود من نوع UUID بدلاً من حقل نصي بطول 26 حرفاً عندما تهم المساحة وحجم الفهرس. حوّل إلى سلسلة Base32 فقط عند الحدود حيث يراها البشر أو الروابط. تمنحك علامة تبويب التحويل في هذه الأداة شكل UUID للتخزين.
تذكّر أن الطابع الزمني مرئي
يكشف ULID وقت إنشائه لأي شخص يستطيع قراءته. هذا رائع للتنقيح والترتيب، لكن إن كان كشف وقت الإنشاء مصدر قلق — مثلاً في معرّف معروض علناً — فزِن ذلك التسريب، أو استخدم UUIDv4 عشوائياً بالكامل حيث لا يهم الترتيب.
ولّد دائماً بـ CSPRNG
يعتمد ضمان التفرد على كون البتات العشوائية الثمانين غير قابلة للتنبؤ. استخدم مصدراً آمناً تعمويّاً مثل crypto.getRandomValues، كما تفعل هذه الأداة — وليس Math.random أبداً، الذي قد تدع قابلية التنبؤ به المعرفات تتصادم أو تُخمَّن.
اختر ULID أو UUIDv7 بتعمّد
كلاهما يمنح معرفات بحجم 128 بت مرتبة زمنياً. اختر ULID لأقصر سلسلة آمنة للروابط؛ واختر UUIDv7 عندما يجب أن تبقى في تنسيق UUID القياسي ببتات الإصدار والمتغير. وحّد على واحد لكل نظام، واستخدم علامة تبويب التحويل عندما تحتاج إلى عبور الحدود.

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

ما هو ULID؟
ULID (المعرّف الفريد عالمياً القابل للفرز معجمياً) هو معرّف بحجم 128 بت مصمم ليكون بديلاً أكثر قابلية للفرز وأكثر إيجازاً من UUID. يُكتب كـ 26 حرفاً من ترميز Crockford Base32: تحمل الأحرف العشرة الأولى طابعاً زمنياً بدقة 48 بت بالمللي ثانية منذ حقبة Unix، وتحمل الأحرف الستة عشر المتبقية 80 بت من العشوائية. ولأن الطابع الزمني هو الجزء الأكثر أهمية ويحافظ Base32 على الترتيب، فإن معرفات ULID المنشأة لاحقاً تُفرز دائماً بعد الأقدم عند مقارنتها كسلاسل نصية عادية — فيكون عمود من معرفات ULID مرتباً زمنياً بشكل طبيعي. تستبعد أبجدية Crockford عمداً الأحرف I وL وO وU لتجنّب الالتباس مع الأرقام وللحفاظ على السلسلة غير الحساسة لحالة الأحرف وآمنة للروابط. قُدِّمت معرفات ULID لحل مشكلة عملية في UUIDv4 العشوائي: تتبعثر المعرفات العشوائية عبر فهرس قاعدة البيانات فتضرّ بأداء الإدراج، بينما يهبط ULID ذو بادئة الوقت قرب نهاية الفهرس في كل مرة.
ULID مقابل UUID — أيهما أستخدم؟
استخدم ULID عندما تريد معرفات فريدة وقابلة للفرز بشكل طبيعي حسب وقت الإنشاء؛ واستخدم UUIDv4 الكلاسيكي عندما تحتاج تحديداً إلى معرّف غامض وعشوائي بالكامل دون طابع زمني مضمّن. الفروقات الرئيسية: ULID هو 26 حرفاً من Base32 مقابل 36 حرفاً بشرطات في UUID، فمعرفات ULID أقصر وآمنة للروابط دون هروب. يرمّز ULID وقت إنشائه، وهو ما لا يفعله UUIDv4 — مفيد للترتيب والتنقيح، لكن جدير بالملاحظة إن كنت تفضّل عدم كشف وقت إنشاء السجل. كلاهما بحجم 128 بت وكلاهما يتجنّب التنسيق، فخطر التصادم لأي منهما ضئيل للغاية. إن كانت منظومتك توحّد على معرفات UUID لكنك ما زلت تريد الترتيب الزمني، يوفر UUIDv7 (من مولّد UUID) تصميماً مماثلاً ذا بادئة وقت بتنسيق UUID — أو يمكنك توليد معرفات ULID هنا وتحويلها إلى UUID بعلامة تبويب التحويل.
هل معرفات ULID قابلة للفرز؟
نعم — وهذه هي الميزة المميِّزة. ولأن الطابع الزمني بدقة 48 بت بالمللي ثانية يشغل الأحرف العشرة الأولى ويحافظ Crockford Base32 على الترتيب المعجمي، فإن فرز معرفات ULID كسلاسل نصية عادية يفرزها حسب وقت الإنشاء. ينطبق هذا في أي نظام يقارن السلاسل بايتاً ببايت: ORDER BY في قاعدة بيانات، أو مجموعة مفروزة، أو سرد ملفات، أو فرز مصفوفة بسيط. العائد العملي هو أداء قاعدة البيانات: تُلحَق المفاتيح المرتبة زمنياً في نهاية فهرس B-tree بدلاً من التبعثر عشوائياً مثل UUIDv4، مما يبقي الإدراجات سريعة والفهرس متراصاً. داخل المللي ثانية الواحدة يكون ترتيب معرفات ULID العادية عشوائياً، فإن احتجت إلى ترتيب صارم حتى للمعرفات المسكوكة في نفس المللي ثانية، استخدم الوضع الرتيب الذي يزيد العشوائية فيكون كل قيمة مضمونة الأكبر من سابقتها.
كيف أفك ترميز الطابع الزمني لـ ULID؟
الصق ULID في علامة تبويب فك الترميز فتستخرج الأداة وقت الإنشاء المضمّن فوراً، بالكامل في متصفّحك. تقرأ الأحرف العشرة الأولى، وتحوّلها من Crockford Base32 إلى عدد صحيح بدقة 48 بت من المللي ثانية منذ حقبة Unix، وتعرض تلك اللحظة بتوقيت UTC وتوقيتك المحلي مع قيمة المللي ثانية الخام لـ Unix. على سبيل المثال، يُفكّ ترميز معرّف ULID المرجعي 01ARYZ6S41TSV4RRFFQ69G5FAV إلى 1469918176385 مللي ثانية، أي 2016-07-30T22:36:16.385Z. الأحرف الستة عشر المتبقية هي العشوائية بدقة 80 بت ولا تحمل أي معنى لفك ترميزه. قراءة الطابع الزمني بهذه الطريقة مفيدة للتنقيح، أو لتدقيق وقت إنشاء السجل، أو للتحقق من أن المعرّف هو حقاً ULID — دون أي استعلام لقاعدة بيانات.
ما هو ULID الرتيب؟
يضمن ULID الرتيب ترتيباً صارماً حتى للمعرفات المولّدة داخل المللي ثانية نفسها. تتشارك معرفات ULID العادية المنشأة في مللي ثانية واحدة بادئة الوقت ذات الأحرف العشرة نفسها، لكن ذيولها العشوائية بدقة 80 بت مستقلة، فترتيبها النسبي غير محدّد. يحل التوليد الرتيب هذا: يحصل أول ULID في مللي ثانية معيّنة على عشوائية جديدة، ويُنتج كل ULID لاحق في نفس المللي ثانية بزيادة العشوائية السابقة بمقدار واحد. والنتيجة تسلسل تكون فيه كل قيمة أكبر تماماً من التي قبلها، فتبقى دُفعة مُدرَجة في حلقة محكمة مفروزة بدقة. هذا يهم في الأنظمة عالية الإنتاجية — سجلات الأحداث وصفوف الرسائل وعمليات الاستيراد بالجملة — حيث يمكن إنشاء صفوف كثيرة أسرع من نبضة ساعة المللي ثانية وما زلت تحتاج إلى مفتاح ثابت ومتزايد.
هل مولّد ULID هذا آمن وخاص؟
نعم على الصعيدين. تأتي العشوائية في كل ULID من crypto.getRandomValues، مولّد الأرقام العشوائية الآمن تعمويّاً في المتصفّح — وليس Math.random أبداً — فتكون البتات العشوائية الثمانون غير قابلة للتنبؤ واحتمال تصادم معرّفَي ULID داخل نفس المللي ثانية ضئيل للغاية. والأهم بنفس القدر، يجري كل شيء محلياً: تُولّد معرفات ULID وتُفكّ ترميزها وتُحوّل بالكامل على جهازك. لا يُرفع أو يُسجَّل أو يُخزَّن شيء، ويمكنك تأكيد ذلك بفتح أدوات المطوّر ومراقبة علامة تبويب الشبكة وهي صامتة أثناء نقرك على توليد. خاصية الخصوصية تلك هي السبب الكامل لإنشاء المعرفات في المتصفّح بدلاً من خادم قد يحتفظ، من حيث المبدأ، بنسخة من كل قيمة يسلّمها.
ما الفرق بين ULID وUUIDv7؟
كلٌّ من ULID وUUIDv7 معرّف بحجم 128 بت مرتب زمنياً يضع طابعاً زمنياً بالمللي ثانية أولاً، فكلاهما يُفرز حسب وقت الإنشاء وكلاهما يفهرس بكفاءة — الفكرة الجوهرية واحدة. الفرق في التنسيق والترميز. يُعرض ULID كـ 26 حرفاً من Crockford Base32 دون شرطات، وهو أقصر وآمن للروابط؛ بينما يُعرض UUIDv7 بتخطيط UUID القياسي ذي 36 حرفاً ست عشرياً بشرطات ويحمل بتات الإصدار والمتغير في مواضع ثابتة، فهو UUID صالح بالكامل وفق RFC 9562 تقبله أي مكتبة UUID. اختر UUIDv7 عندما يجب أن تبقى في منظومة UUID (عمود قاعدة بيانات من نوع UUID أو واجهة API من نوع UUID)؛ واختر ULID عندما تريد أقصر سلسلة قابلة للفرز. ولأن كليهما بحجم 128 بت، يمكنك توليد ULID هنا وتحويله إلى شكل UUID بعلامة تبويب التحويل، أو توليد UUIDv7 بـ مولّد UUID.

أدوات ذات صلة

عرض جميع الأدوات →

مولّد تجزئة bcrypt والتحقق منها

أدوات الأمن

ولّد تجزئات كلمات المرور بـ bcrypt وتحقق منها أونلاين — تكلفة قابلة للضبط، بادئات $2b$/$2a$/$2y$. 100% في متصفحك؛ كلمة مرورك لا تُرفع أبداً.

محلّل JWT — فك ترميز الرموز

أدوات الأمن

فك ترميز رموز JWT أونلاين مع محلّل JWT المجاني. افحص الترويسة والحمولة والتوقيع وانتهاء الصلاحية والخوارزمية والمطالبات فوراً. 100% في المتصفح — رمزك لا يغادر جهازك. بلا تسجيل، بلا تتبّع.

مُنشئ وترميز JWT

أدوات الأمن

مولّد ومرمّز JWT مجاني أونلاين. ابنِ الترويسة والحمولة، ووقّع بـ HS256 أو RS256 أو ES256 فوراً. 100% في المتصفح — سرّك ومفتاحك لا يغادران جهازك.

مولّد مفتاح JWT السري — HS256/384/512

أدوات الأمن

ولّد مفتاحاً سرياً قوياً ومطابقاً للمواصفة لـ HS256/384/512 — 100% في متصفحك، لا يُرسل إلى خادم أبداً. base64url أو base64 أو hex؛ انسخه لملف .env.

مولّد تجزئة MD5 — فوري ومجاني أونلاين

أدوات الأمن

أنشئ تجزئة MD5 وSHA-256 وSHA-1 وSHA-512 فوراً — أداة مجانية تعمل في متصفّحك بدون تتبّع أو رفع بيانات. الصق النص واحصل على التجزئة في ثانية. جرّبها الآن.

مولّد كلمات مرور عشوائية — قوي وآمن ومجاني

أدوات الأمن

ولّد كلمات مرور عشوائية قوية فوراً — أداة مجانية أونلاين تعمل في متصفّحك فقط. خصّص الطول والأحرف، دُفعات حتى 50 مع تحليل الإنتروبيا. بياناتك لا تغادر جهازك.