ULID جنریٹر کا تعارف
ULID (Universally Unique Lexicographically Sortable Identifier) ایک 26 حروف پر مشتمل شناخت کنندہ ہے جو 128 بٹ پر مبنی ہوتا ہے۔ اس صفحے پر آپ منتخب کر سکتے ہیں کہ آپ کو کتنے ULIDs چاہییں — ایک سے لے کر سو تک — اور ایک کلک میں یہ ٹول انہیں فوری طور پر تیار کر دیتا ہے۔ ہر ID ایک 26 حرفی، کیس-انسینسیٹیو (case-insensitive) سٹرنگ کے طور پر ظاہر ہوتا ہے، جسے آپ انفرادی طور پر یا ایک ساتھ کاپی کر سکتے ہیں۔ ULID کا سب سے بڑا فائدہ یہ ہے کہ یہ UUID سے چھوٹا ہوتا ہے (26 حروف بمقابلہ 36) اور اس میں کوئی ہائفن (hyphen) موجود نہیں ہوتا۔
تمام نسل کشی (generation) آپ کے براؤزر میں مقامی طور پر ہوتی ہے، crypto.getRandomValues() کا استعمال کرتے ہوئے، اور کوئی بھی ڈیٹا سرور کو نہیں بھیجا جاتا۔
اس صفحے کو کیا خاص بناتا ہے
دیگر فارمیٹس کے برعکس، ULID صرف Crockford کے base32 حروف تہجی کا استعمال کرتا ہے۔ اس حروف تہجی میں 0-9 اور A-Z شامل ہیں، لیکن I، L، O، اور U کو نکال دیا گیا ہے تاکہ بصری ابہام سے بچا جا سکے۔ اس کا مطلب ہے کہ تمام ULIDs کیس-انسینسیٹیو ہیں — یعنی ABCD اور abcd ایک ہی سمجھے جاتے ہیں — اور ان میں کوئی ہائفن نہیں ہوتا۔
ULID کا دوسرا اہم پہلو یہ ہے کہ یہ تخلیق کے وقت کے مطابق لغوی ترتیب (lexicographic sortability) رکھتا ہے۔ پہلے 10 حروف میں ایک ملی سیکنڈ کی درستگی والا ٹائم سٹیمپ (timestamp) محفوظ ہوتا ہے، جس کی وجہ سے IDs کو صرف ان کے سٹرنگ ویلیو کی بنیاد پر ترتیب دیا جا سکتا ہے۔ یہ خصوصیت ڈیٹا بیس میں B-tree انڈیکس کی کارکردگی کو بہتر بناتی ہے، کیونکہ نئی IDs تقریباً ترتیب وار (monotonically increasing) ہوتی ہیں۔
اس صفحے پر آپ کو "uppercase" یا "hyphens" کے لیے کوئی ٹوگل نہیں ملے گا، کیونکہ ULID میں یہ اختیارات فطری طور پر غیر ضروری ہیں۔
ان پٹ اور آؤٹ پٹ
ان پٹ:
- فارمیٹ کا انتخاب: ULID پر سیٹ۔
- گنتی (Count): ایک پورے نمبر میں 1 سے 100 تک۔
آؤٹ پٹ:
- مطلوبہ تعداد میں ULID سٹرنگز کی فہرست۔
- ایک شمار کنندہ جو بتاتا ہے کہ کتنے IDs تیار ہوئے۔
- اسٹیٹس پیغامات: "Ready."، "Generated."، اور "Copied all!" جب پوری فہرست کاپی ہو جائے۔
- (ULID کے لیے کوئی upppercase یا hyphen کے اختیارات ظاہر نہیں ہوتے۔)
صارف جب بھی فارمیٹ، گنتی، یا کسی بھی آپشن کو تبدیل کرتا ہے تو IDs فوری طور پر دوبارہ تیار ہو جاتے ہیں۔
قواعد اور حدود
- ULID ہمیشہ 26 حروف کا ہوتا ہے۔ پہلے 10 حروف (48 بٹ) کسی ایک ملی سیکنڈ میں تخلیق کے وقت کو ظاہر کرتے ہیں، جبکہ بقیہ 16 حروف (80 بٹ) تصادفی ہوتے ہیں۔
- ULIDs تخلیق کے وقت کے مطابق ترتیب دیے جا سکتے ہیں، لیکن ایک ہی ملی سیکنڈ میں پیدا ہونے والے IDs کے درمیان سخت ترتیب (strict ordering) کی ضمانت نہیں ہے۔
- کسی بھی آپشن میں تبدیلی پوری فہرست کو دوبارہ تیار کرتی ہے۔
- انفرادی ULID پر کلک کرکے اسے کلپ بورڈ پر کاپی کیا جا سکتا ہے۔
- ٹول صرف 1 سے 100 IDs تک تیار کرتا ہے؛ اس حد سے باہر کے نمبر قبول نہیں ہوتے۔
- تمام نسل کشی براؤزر میں مقامی طور پر مضبوط تصادفی اعداد (cryptographically strong randomness) کے ذریعے ہوتی ہے۔
یہ کس کے لیے ہے
یہ صفحہ خاص طور پر ان لوگوں کے لیے مفید ہے:
- ویب اور موبائل ڈویلپرز: جنہیں چھوٹے، URL-محفوظ شناخت کنندگان کی ضرورت ہوتی ہے جو تخلیق کے وقت کے مطابق ترتیب دیے جا سکیں۔
- ڈیٹا بیس ایڈمنسٹریٹر: جو بنیادی کلید (primary key) کے طور پر استعمال کرنے کے لیے تقریباً ترتیب وار IDs چاہتے ہیں تاکہ B-tree انڈیکس کی کارکردگی بہتر ہو۔
- سسٹم آرکیٹیکٹ: جو تقسیم شدہ نظاموں میں منفرد اور ترتیب پذیر IDs چاہتے ہیں مگر UUID سے زیادہ کمپیکٹ ہوں۔
- API ڈیزائنرز: جو عوامی IDs کو ظاہر کرنا چاہتے ہیں جو اندازہ لگانا مشکل ہوں مگر پھر بھی انسان کے لیے قابلِ مطالعہ ہوں (مختلف حروف کے بغیر)۔
- وہ لوگ جو UUID کو بہت لمبا سمجھتے ہیں اور 128 بٹ کی جگہ کو کم حروف میں پیش کرنے کا متبادل چاہتے ہیں۔
ULID کی اندرونی ساخت
ULID میں 128 بٹ کی معلومات کو اس طرح تقسیم کیا گیا ہے:
| حصہ | بٹس | حروف | کام |
|---|---|---|---|
| ٹائم سٹیمپ | 48 | 10 | ملی سیکنڈ میں تخلیق کا وقت (یونکس ایپوک سے) |
| تصادفی حصہ | 80 | 16 | مضبوط تصادفی عدد |
پہلے 10 حروف Crockford base32 میں 48 بٹ ٹائم سٹیمپ کو انکوڈ کرتے ہیں، جو 1 فروری 1970 سے لے کر تقریباً 10889 عیسوی تک کا احاطہ کرتا ہے (48 بٹ کی وجہ سے)۔ اس کا مطلب ہے کہ ULID وقت کے لحاظ سے کافی دور تک قابلِ استعمال ہے۔
تصادفی حصہ 80 بٹ (16 حروف) پر مشتمل ہے۔ Crockford base32 کی وجہ سے ہر حرف 5 بٹ کی نمائندگی کرتا ہے۔ اس طرح 16 × 5 = 80 بٹ۔ اس تصادفی حصے کی وجہ سے ہی ULID منفرد رہتا ہے، یہاں تک کہ ایک ہی ملی سیکنڈ میں بھی اگر ایک سے زیادہ IDs تیار ہوں تو ان کے تصادفی حصے مختلف ہوں گے۔
Crockford Base32 انکوڈنگ
Crockford base32 ایک بینچ مارک انکوڈنگ اسکیما ہے جو بصری ابہام کو کم کرنے کے لیے بنایا گیا ہے۔ اس میں درج ذیل حروف شامل ہیں:
0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K M N P Q R S T V W X Y Z
نوٹ کریں کہ I اور L کو نکال دیا گیا ہے (کیونکہ وہ 1 سے مشابہ ہیں)؛ O کو نکال دیا گیا ہے (کیونکہ وہ 0 سے مشابہ ہے)؛ U کو نکال دیا گیا ہے (کیونکہ یہ V سے مشابہ ہے)۔ اس کے علاوہ، چھوٹے اور بڑے حروف برابر سمجھے جاتے ہیں (مثلاً a اور A دونوں A کی نمائندگی کرتے ہیں)۔ اس طرح ULID کیس-انسینسیٹیو ہو جاتا ہے، یعنی آپ اسے کسی بھی صورت میں لکھ سکتے ہیں۔
UUID v4 اور UUID v7 سے موازنہ
| خصوصیت | ULID | UUID v4 | UUID v7 |
|---|---|---|---|
| حروف کی تعداد | 26 | 36 (4 ہائفن کے ساتھ) | 36 (4 ہائفن کے ساتھ) |
| ہائفن | نہیں | ہاں | ہاں |
| کیس-حساسیت | نہیں | ہاں | ہاں |
| وقت کے مطابق ترتیب | ہاں (ملی سیکنڈ) | نہیں | ہاں (ملی سیکنڈ) |
| بٹس | 128 | 122/128 (v4 میں 4 بٹ ورژن) | 128 |
| URL-محفوظ | ہاں (کوئی انکوڈنگ ضروری نہیں) | ہاں لیکن ہائفن شامل ہیں | ہاں لیکن ہائفن شامل ہیں |
UUID v4 کی 36 حرفی سٹرنگ (32 ہیکساڈیسیمل حروف + 4 ہائفن) ULID کے 26 حرفوں سے زیادہ لمبی ہوتی ہے۔ UUID v7 بھی وقت کے مطابق ترتیب دینے کا فائدہ دیتا ہے لیکن اس میں اب بھی ہائفن موجود ہیں اور یہ کیس-حساس ہے۔ ULID ان دونوں کمیوں کو دور کرتا ہے۔
ترتیب دینا اور کلاک پر مبنی ترتیب
ULIDs کو ان کی سٹرنگ ویلیو کی بنیاد پر لغوی طور پر ترتیب دیا جا سکتا ہے۔ مثال:
01ARZ3NDEKTSV4RRFFQ69G5FAV01ARZ3NDEKTSV4RRFFQ69G5FAW
جب آپ انہیں الف-بے کی ترتیب سے دیکھیں گے تو پہلے 10 حروف (ٹائم سٹیمپ) تقریباً ایک جیسے ہوں گے، لیکن دوسری سٹرنگ میں آخری حرف W ہے جو V سے بڑا ہے، اس لیے یہ بعد میں آئے گی۔ لیکن اگر دونوں ایک ہی ملی سیکنڈ میں پیدا ہوئیں، تو تصادفی حصہ فیصلہ کرے گا — کیونکہ ٹائم سٹیمپ ایک جیسا ہوگا۔ یہی وجہ ہے کہ ایک ہی ملی سیکنڈ میں ترتیب کی ضمانت نہیں ہے۔
تصادم (Collision) کا امکان
ULID میں 80 بٹ کا تصادفی حصہ ہوتا ہے۔ اس کا مطلب ہے کہ اگر آپ بہت زیادہ تعداد میں IDs تیار کرتے ہیں تو تصادم کا امکان بہت کم ہے۔ برتھ ڈے پیراڈوکس (birthday paradox) کے مطابق، تقریباً 2^(40) یعنی ایک کھرب (1 trillion) IDs پیدا کرنے کے بعد تصادم کا 50% امکان ہوتا ہے۔ عام استعمال میں (فی سیکنڈ ہزاروں IDs) تصادم کا خطرہ عملاً صفر ہے۔
URL محفوظیت
Crockford base32 کے تمام حروف (اعداد اور بڑے/چھوٹے حروف) RFC 3986 میں "unreserved characters" میں شامل ہیں۔ اس کا مطلب ہے کہ کسی بھی ULID کو URL میں استعمال کرنے کے لیے کسی قسم کی فیصد-انکوڈنگ (percent-encoding) کی ضرورت نہیں ہے۔ مثال کے طور پر 01ARZ3NDEKTSV4RRFFQ69G5FAV کو بغیر کسی تبدیلی کے https://example.com/id/01ARZ3NDEKTSV4RRFFQ69G5FAV میں استعمال کیا جا سکتا ہے۔
مقامی نسل کشی اور پرائیویسی
یہ ٹول براؤزر میں crypto.getRandomValues() کا استعمال کرتا ہے، جو جدید براؤزرز میں دستیاب ایک مضبوط تصادفی عدد جنریٹر ہے۔ اس کا مطلب ہے کہ تمام IDs آپ کے کمپیوٹر پر ہی بنتی ہیں اور کوئی بھی ڈیٹا کسی سرور کو نہیں بھیجا جاتا۔ یہ ان سروسز کے برعکس ہے جو سرور پر IDs تیار کرتی ہیں اور آپ کے IP ایڈریس یا درخواستوں کی لاگ رکھ سکتی ہیں۔
انسانی پڑھنے کی قابلیت
ULID کے 26 حروف نسبتاً مختصر ہوتے ہیں، لیکن ان میں کوئی ہائفن نہیں ہوتا جس کی وجہ سے انہیں یاد رکھنا تھوڑا مشکل ہو سکتا ہے۔ تاہم، کیس-انسینسیٹیو ہونے کی وجہ سے غلطی کرنے کا امکان کم ہے — آپ A اور a کو ایک جیسا سمجھ سکتے ہیں۔
موازنہ کرنے پر:
- UUID: 36 حروف (4 ہائفن سمیت) → لمبا، لیکن ہائفن پڑھنے میں مددگار۔
- ULID: 26 حروف (بغیر ہائفن) → چھوٹا، لیکن ایک سلسلہ۔
- NanoID: 21 حروف (منتخب حروف تہجی کے ساتھ) → بہت چھوٹا، لیکن کوئی وقت کی معلومات شامل نہیں۔
عمومی سوالات (FAQ)
سوال: کیا ULID ہمیشہ منفرد ہوتا ہے؟ جواب: ہاں، عملی طور پر ہاں۔ 80 بٹ تصادفی حصے کی وجہ سے تصادم کا امکان بہت کم ہے۔ لیکن نظریاتی طور پر تصادم ممکن ہے، خاص طور پر اگر ایک ہی ملی سیکنڈ میں بہت زیادہ IDs تیار کی جائیں (کھربوں)۔
سوال: کیا میں ULID کو UUID کی جگہ استعمال کر سکتا ہوں؟ جواب: جی ہاں، دونوں 128 بٹ ہیں اور منفرد IDs کی نمائندگی کرتے ہیں۔ لیکن اگر آپ کے سسٹم کو واضح طور پر UUID فارمیٹ کی ضرورت ہو (جیسے 8-4-4-4-12 کی شکل میں)، تو ULID موزوں نہیں ہوگا۔ بصورت دیگر، ULID ایک بہتر متبادل ہے۔
سوال: کیا ULID میں حروف کے چھوٹے/بڑے ہونے سے فرق پڑتا ہے؟
جواب: نہیں، ULID کیس-انسینسیٹیو ہے۔ 01arZ3NDEKTSV4RRFFQ69G5FAV اور 01ARZ3NDEKTSV4RRFFQ69G5FAV ایک جیسے سمجھے جاتے ہیں۔
سوال: ULID کی زیادہ سے زیادہ عمر کتنی ہے؟ جواب: 48 بٹ ٹائم سٹیمپ 1 فروری 1970 سے لے کر تقریباً 10889 عیسوی تک کا احاطہ کرتا ہے، اس لیے ULID کا استعمال کئی ہزار سال تک ممکن ہے۔
سوال: کیا میں ULID کو ڈیٹا بیس پرائمری کلید کے طور پر استعمال کر سکتا ہوں؟ جواب: جی ہاں، تقریباً ترتیب وار ہونے کی وجہ سے یہ B-tree انڈیکس کے لیے بہت موزوں ہے، جیسا کہ UUID v7 بھی کرتا ہے۔ بس یاد رکھیں کہ یہ سٹرنگ کی شکل میں ہے، لہٰذا انڈیکس کی کارکردگی عددی کلید کے مقابلے میں تھوڑی کم ہو سکتی ہے۔
سوال: کیا ULID کو سمجھنے کے لیے میں اسے ڈی کوڈ کر سکتا ہوں؟ جواب: ہاں، پہلے 10 حروف وقت کی معلومات رکھتے ہیں، جسے آپ Crockford base32 ڈی کوڈر کے ذریعے پڑھ سکتے ہیں۔ لیکن تصادفی حصہ ڈی کوڈ کرنے سے کوئی اضافی معلومات نہیں ملتی۔
سوال: کیا یہ ٹول انٹرنیٹ کنیکشن کے بغیر بھی کام کرتا ہے؟ جواب: ایک بار صفحہ لوڈ ہونے کے بعد، تمام نسل کشی براؤزر میں ہوتی ہے، اس لیے انٹرنیٹ کی ضرورت نہیں ہے جب تک آپ صفحہ کو دوبارہ لوڈ نہ کریں۔