طريقة الاستخدام
- اختر النوع من المعرّفات، واكتب عددها تحت العدد.
- من أجل Nanoid، اضبط الطول والأحرف في الأبجدية.
- انسخ معرّفاً من المعرّفات المولّدة. يعطي كل صف الوقت الذي يحمله المعرّف، أو شرطة لـNanoid.
- الصق ULID أو UUID من الإصدار 7 في اقرأ الوقت من لقراءة الوقت الذي يحمله.
ثلاثة أنواع من المعرّفات
ULID (ulid/spec) عدد من 128 بتاً: 48 بتاً من وقت Unix بالملي ثانية، ثم 80 بتاً عشوائية، ويُكتب في 26 حرفاً من base32 لـ Crockford. ويبدأ UUID من الإصدار 7 (RFC 9562، القسم 5.7) أيضاً بوقت من 48 بتاً بالملي ثانية، بصيغة UUID المكوّنة من 8-4-4-4-12. أما Nanoid فسلسلة عشوائية بالطول والأبجدية اللذين تختارهما، ولا تحمل وقتاً.
- ULID: 26 حرفاً، مثل 01ARZ3NDEKTSV4RRFFQ69G5FAV
- UUID من الإصدار 7: 36 حرفاً، مثل 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
- Nanoid: أي طول وأي أبجدية، دون وقت
الترتيب عند توليد معرّفات معاً
المعرّفات المولّدة دفعة واحدة تشترك في ملي ثانية واحدة. ويزيد ULID جزأه العشوائي بواحد عن المعرّف السابق، ويزيد UUID من الإصدار 7 عدّاداً من 12 بتاً، فتترتب المعرّفات حسب ترتيب صنعها (ulid/spec، Monotonicity؛ RFC 9562، القسم 6.2). وداخل الملي ثانية الواحدة لا يُرتَّب Nanoid، إذ يُسحب كل واحد من جديد.
تأتي القيم العشوائية من crypto.getRandomValues، وهو مصدر البايتات العشوائية في المتصفح نفسه. ويسحب Nanoid كل حرف دون انحياز، بتجاوز قيم البايتات التي تفضّل بعض الأحرف.
مثال محلول: قراءة وقت ULID
بلصق 01ARZ3NDEKTSV4RRFFQ69G5FAV، وهو مثال ULID في المواصفة، تكون النتيجة: الوقت هو 30 يوليو 2016 الساعة 23:54:10 بتوقيت UTC، أي 1,469,922,850,259 ملي ثانية بعد 1 يناير 1970.
الأحرف العشرة الأولى، 01ARZ3NDEK، تحمل الوقت. والأحرف الستة عشر الأخيرة تحمل 80 بتاً عشوائياً، لذلك يُرتَّب المعرّف بوقته بوصفه نصاً عادياً.
الأسئلة الشائعة
هل ULID هو نفسه UUID؟
له 128 بتاً مثل UUID، لكنه يُكتب في 26 حرفاً من base32 لـ Crockford، وليس بصيغة UUID. أما UUID من الإصدار 7 فهو الصيغة في RFC 9562 التي تبدأ هي أيضاً بالوقت، وتولّد الصفحة الاثنين.
هل أستخدم هذه المعرّفات ككلمات مرور أو رموز جلسات؟
لا. صُنعت لتكون فريدة ومرتبة، لا لتكون سرية. والمعرّفات المولّدة معاً تشترك في الوقت وتتزايد، فيمكن تخمين التالي. استخدم مولّد كلمات المرور، أو رمزاً تشفيرياً للأسرار.
ما معرّف Nanoid؟
سلسلة عشوائية تُسحب من الأبجدية التي تختارها، بالطول الذي تختاره. ويحمل معرّف من 21 حرفاً من الأحرف الـ64 الآمنة للعناوين نحو 126 بتاً من العشوائية، وهو الافتراضي في هذه الصفحة.
لماذا يعرض الصف شرطة بدلاً من الوقت؟
Nanoid عشوائي من أوله إلى آخره ولا يحمل وقتاً، فلا شيء يُقرأ فيه. ولا يحمل وقت الإنشاء إلا ULID وUUID من الإصدار 7.
لماذا لا يمكن قراءة وقت UUID؟
لا يحمل الوقت إلا UUID من الإصدار 7. وتخبرك الصفحة بإصدار الـUUID الذي لصقته، وتقرأ UUID من الإصدار 7 يتبع RFC 9562.
هل تُرسل معرّفاتي أو النص الملصوق إلى أي جهة؟
لا. تُصنع المعرّفات في متصفحك من crypto.getRandomValues، ويُقرأ النص الملصوق هنا فقط. ولا يُرفع شيء ولا يُحفظ.
المصادر
- ULID specification, ulid/spec on GitHub (باللغة الإنجليزية)
- RFC 9562: Universally Unique IDentifiers (UUIDs), version 7 (باللغة الإنجليزية)
- Crockford's Base32 encoding (باللغة الإنجليزية)
- W3C Web Cryptography API: getRandomValues (باللغة الإنجليزية)
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.