کیا آپ کو ایک ایسے شناخت کار کی ضرورت ہے جو کسی اور کے بنائے ہوئے شناخت کار سے نہ ٹکرائے، ایک ایسی مشین پر جس کا آپ نے کبھی نام نہیں سنا ہو، اور کسی سے اجازت لیے بغیر؟ یہ وہ کام ہے جو UUID کرتا ہے۔ یہ ایک 128 بٹ کا نمبر ہے، جو مانوس 8-4-4-4-12 پیٹرن میں 36 حروف کے طور پر لکھا جاتا ہے، اور اس کا پورا ڈیزائن اس بات کو یقینی بناتا ہے کہ ان میں سے کوئی بھی دو نمبر یکساں نہیں ہوں گے حالانکہ کوئی بھی چیز اس بات کو کنٹرول نہیں کرتی کہ کس کو کون سا نمبر ملتا ہے۔ یہ مفت جنریٹر انہیں آپ کے براؤزر میں بناتا ہے: 'ورژن' میں کوئی ورژن منتخب کریں، 'انتخاب کی تعداد' میں بتائیں کہ آپ کو کتنے درکار ہیں، اور 'بنائیں' دبائیں۔ صفحہ ایک واحد v4 کے ساتھ کھلتا ہے، وہ ورژن جو زیادہ تر پروجیکٹس چاہتے ہیں، لہذا پہلا شناخت کار صرف ایک کلک کی دوری پر ہے۔
ہر شناخت کار آپ کے براؤزر کے ذریعے Web Crypto API کا استعمال کرتے ہوئے بنایا جاتا ہے۔ ورژن 4، crypto.randomUUID() استعمال کرتا ہے جہاں براؤزر اسے فراہم کرتا ہے اور بصورت دیگر crypto.getRandomValues() استعمال کرتا ہے — جو کہ JavaScript کے سوڈو-رینڈم فنکشن جیسے کہ Math.random() کے بجائے بے ترتیبی کا ایک مضبوط کرپٹوگرافک ذریعہ ہے۔ ورژن 7 شروع میں ایک 48 بٹ ملی سیکنڈ ٹائم اسٹیمپ رکھتا ہے، پھر ایک 12 بٹ کاؤنٹر جو اسی ملی سیکنڈ کے اندر بڑھتا ہے، اور پھر 62 رینڈم بٹس، جو کہ RFC 9562 میں بیان کردہ ترتیب کا طریقہ ہے؛ یہی کاؤنٹر وجہ ہے کہ ایک ہزار کا بیچ بے ترتیب ہونے کے بجائے ترتیب سے سامنے آتا ہے۔ ورژن 1 ایک ٹائم اسٹیمپ کو رینڈم نوڈ شناخت کار کے ساتھ ملاتا ہے جس میں ملٹی کاسٹ بٹ سیٹ ہوتا ہے، اس لیے یہ آپ کے نیٹ ورک کارڈ کا ایڈریس کبھی نہیں لاتا جیسا کہ 1990s کی ابتدائی نفاذات میں ہوتا تھا۔ ورژن 3 اور 5 بالکل بھی رینڈم نہیں ہیں: وہ MD5 اور SHA-1 بالترتیب استعمال کرتے ہوئے ایک نیم اسپیس کو نام کے ساتھ ہیش کرتے ہیں، اور یہ ہیشنگ بھی آپ کی ڈیوائس پر ہی ہوتی ہے۔ کوئی ڈیٹا سرور پر نہیں بھیجا جاتا، کچھ بھی لاگ نہیں کیا جاتا، اور ایک بار صفحہ لوڈ ہو جانے کے بعد یہ کنکشن بند ہونے پر بھی کام کرتا رہتا ہے۔
'ورژن' وہ فیلڈ ہے جو باقی سب کا فیصلہ کرتا ہے۔ ورژن 4، 122 رینڈم بٹس پر مشتمل ہے اور اس کی کوئی ساخت نہیں ہے — یہ ڈیفالٹ ہے، اور تب صحیح جواب ہوتا ہے جب ایک شناخت کار کا صرف منفرد ہونا ضروری ہو۔ ورژن 7، 62 رینڈم بٹس کو برقرار رکھتا ہے لیکن اس وقت کے ساتھ شروع ہوتا ہے جب اسے بنایا گیا تھا، تاکہ ان کا ایک سیٹ اس ترتیب میں آئے جس میں وہ بنائے گئے تھے؛ یہی وجہ ہے کہ جب شناخت کار نے ڈیٹا بیس کی بننا ہو تو اسی ورژن کا انتخاب کیا جاتا ہے۔ ورژن 1 اصل ٹائم بیسڈ اسکیم ہے، جسے یہاں ان سسٹمز کے لیے رکھا گیا ہے جو اب بھی اس کا مطالبہ کرتے ہیں۔ ورژن 3 اور 5 ایک مختلف جوڑا ہیں: یہ ڈیٹرمنسٹک ہیں، جس کا مطلب ہے کہ ایک جیسی ان پٹ ہمیشہ ایک ہی شناخت کار بناتی ہے، اور وہ دو اضافی فیلڈز لیتے ہیں — 'نیم اسپیس' جو معیاری اسپیسز DNS، URL، OID اور X.500 میں سے ایک ہے یا آپ کا اپنا کوئی 'کسٹم' اسپیس، اور 'نام' جو وہ اسٹرنگ ہے جس کی شناخت کی جا رہی ہے۔ v5 کو URL نیم اسپیس اور https://example.com/a دیں اور آپ کو آج، کل اور کسی اور کی مشین پر بھی وہی UUID ملے گا۔ اسی وجہ سے، جب v3 یا v5 منتخب کیا جاتا ہے تو 'انتخاب کی تعداد' غائب ہو جاتا ہے: ایک ڈیٹرمنسٹک ویلیو کی ایک ہزار کاپیاں، ایک ڈیٹرمنسٹک ویلیو کی ہی ایک ہزار کاپیاں ہوں گی۔ ہر دوسرے ورژن کے لیے، 'انتخاب کی تعداد' 1 سے 1000 تک ہوتا ہے۔
چار سوئچز آؤٹ پٹ کی شکل کو تبدیل کرتے ہیں جبکہ ان کے نیچے موجود 128 بٹس کو تبدیل نہیں کرتے۔ 'بڑے حروف' ہیکساڈیسیمل ہندسوں کو کیپیٹل کے طور پر پرنٹ کرتا ہے، 'ہائفن کے بغیر' وہ مختصر 32 حروف والی شکل دیتا ہے جسے کچھ کالم اور فائلوں کے نام ترجیح دیتے ہیں، اور 'درمیانی قوسین' ویلیو کو { } میں لپیٹ دیتا ہے — وہ شکل جسے Windows اور .NET کی دنیا GUID کہتی ہے۔ 'اعلی درجے کے اختیارات' کے تحت، urn:uuid: وہ سابقہ شامل کرتا ہے جو اسے ایک رسمی URN بناتا ہے؛ یہ آن ہونے پر 'درمیانی قوسین' اور 'ہائفن کے بغیر' کو بند کر دیتا ہے، کیونکہ معیار صرف ایک URN شکل کی اجازت دیتا ہے اور وہ ہائفنز والی مستند شکل ہے۔ 'کاپی کا فارمیٹ' یہ فیصلہ کرتا ہے کہ جب آپ کوئی بیچ لیتے ہیں تو اسے کیسے جوڑا جاتا ہے: ہر لائن پر ایک، کوما سے الگ کیا گیا، یا ہر ویلیو اقتباسات میں اور آخر میں ایک کوما کے ساتھ، جو سیدھے کوڈ میں ارے کے طور پر پیسٹ ہو جاتا ہے۔ نتیجے کے نیچے ایک لائن ہوتی ہے جو بٹس میں رینڈم نیس کی اطلاع دیتی ہے — v4 کے لیے 122، v7 کے لیے 62 — اور، v7 کے لیے، بیچ کے پہلے شناخت کار میں انکوڈ کیا گیا ٹائم اسٹیمپ، تاکہ ویلیو کے اندر موجود وقت پوشیدہ ہونے کے بجائے نظر آئے۔ 'سب کاپی کریں' اور 'فائل میں محفوظ کریں' دونوں 'کاپی کا فارمیٹ' کا احترام کرتے ہیں۔ 'تاریخچہ' آپ کے پچھلے 10 بیچز کو آپ کے اپنے براؤزر میں محفوظ رکھتا ہے: کسی ایک کو واپس لانے کے لیے اس پر کلک کریں، کسی ایک اندراج کو کاپی یا حذف کریں، یا سب صاف کر دیں۔ 'صاف کریں' نتیجے کو خالی کر دیتا ہے اور آپ کی سیٹنگز کو اسی طرح چھوڑ دیتا ہے، اور 50 شناخت کاروں کے بعد، یہ فہرست پچاس قطاروں کے بجائے ایک اسکرول کے قابل بلاک بن جاتی ہے۔
اس صفحے پر سب سے اہم چیز پرائمری کی کے طور پر v4 اور v7 کے درمیان فرق ہے، اور یہ کوئی پسند کا معاملہ نہیں ہے۔ ڈیٹا بیس انڈیکسز B-tree ہیں جنہیں ترتیب وار رکھا جاتا ہے، اور اس ترتیب میں ایک نئی کی کہاں آ کر رکتی ہے، یہ فیصلہ کرتا ہے کہ انسرٹ کرنے میں کتنا کام درکار ہوگا۔ v4 کی رینڈم ہوتی ہے، لہذا لگاتار انسرٹس انڈیکس کے غیر متعلقہ کونوں میں جا گرتی ہیں: جو صفحات بھرے ہوئے تھے وہ آدھے حصوں میں تقسیم ہو جاتے ہیں، ٹری کے جو حصے ڈیٹا بیس میموری میں رکھتا ہے وہ شاذ و نادر ہی وہ حصے ہوتے ہیں جن کی اگلی انسرٹ کو ضرورت ہوتی ہے، اور انڈیکس ان قطاروں کے مقابلے میں بڑا اور زیادہ بکھرا ہوا ہو جاتا ہے جن کی طرف یہ اشارہ کرتا ہے۔ v7 کی موجودہ ملی سیکنڈ سے شروع ہوتی ہے، لہذا لگاتار انسرٹس ٹری کے دائیں کنارے پر ایک ساتھ جا گرتی ہیں، جو کہ وہ پیٹرن ہے جو آٹو انکریمنٹ کرنے والا انٹیجر بناتا ہے اور وہ پیٹرن ہے جس کے گرد انڈیکس کے ڈھانچے بنائے گئے تھے۔ یہی مکمل ٹریڈ آف ہے: v7 آپ کو ایک ترتیب وار کی کا انسرٹ برتاؤ دیتا ہے جبکہ اس خاصیت کو برقرار رکھتا ہے جس کی وجہ سے آپ نے سب سے پہلے UUIDs کا انتخاب کیا تھا، جو یہ ہے کہ کوئی بھی سرور سے پوچھے بغیر ایک شناخت کار بنا سکتا ہے۔ اس کی قیمت یہ ہے کہ تخلیق کا وقت اب شناخت کار کے اندر پڑھا جا سکتا ہے، اور یہ اہمیت رکھتا ہے یا نہیں، یہ آپ کے ڈیٹا کے بارے میں ایک سوال ہے، فارمیٹ کے بارے میں نہیں۔
کوئی بھی چیز کبھی بھی UUID کو انفرادیت کے لیے چیک نہیں کرتی؛ اس کا سائز ہی ضمانت ہے۔ کوئی رجسٹری نہیں، کوئی سرور راؤنڈ ٹرپ نہیں، کوئی لک اپ نہیں — ایک جنریٹر ایک نمبر بناتا ہے اور اسے دے دیتا ہے، اور ان میں سے دو کے نہ ٹکرانے کی وجہ محض یہ ہے کہ ورژن 4 کی 2^122 ممکنہ ویلیوز ہیں، تقریباً 5.3 × 10^36۔ برتھ ڈے پرابلم اسے جانچنے کا ایماندارانہ طریقہ ہے: آپ کو کسی بھی دو کے ملنے کے یکساں امکان سے پہلے تقریباً 2.7 × 10^18 شناخت کاروں کی ضرورت ہوگی، جو کہ 86 سال تک ہر سیکنڈ میں ایک ارب نئے UUIDs ہیں۔ یہ واضح کرنا ضروری ہے کہ یہ کیا وعدہ کرتا ہے اور کیا نہیں۔ یہ ایک شماریاتی ضمانت ہے، ریاضیاتی نہیں، اور یہ صرف اس وقت تک کارگر ہے جب تک اس کے نیچے موجود بے ترتیبی حقیقی ہو — ایک جنریٹر جسے خراب طریقے سے سیڈ کیا گیا ہو، یا ایک ورچوئل مشین جسے اس کے اینٹروپی پول کے ساتھ کلون کیا گیا ہو، اسے اس طرح توڑ دیتا ہے کہ فارمیٹ اس کا پتہ نہیں لگا سکتا۔ ورژن 7 اس سوال کو مزید محدود کرتا ہے: ایک ہی ملی سیکنڈ کے اندر ایک جنریٹر خود کو بالکل بھی نہیں دہرا سکتا، کیونکہ کاؤنٹر رینڈم ہونے کے بجائے بڑھتا ہے، اور آزاد جنریٹرز میں 62 رینڈم بٹس اپنا کام کرتے ہیں۔
UUID ایک شناخت کار ہے، پاس ورڈ نہیں۔ ورژن 4 غیر متوقع ہے، اور یہ لوگوں کو اسے ایک راز کے طور پر برتنے کی ترغیب دیتا ہے — پاس ورڈ ری سیٹ لنک، ناقابل قیاس URL، سیشن ٹوکن، API کی۔ غیر متوقع ہونا حقیقی ہے، لیکن رازداری اس بات کی خاصیت ہے کہ کسی ویلیو کو کیسے ہینڈل کیا جاتا ہے، اور شناخت کاروں کو ڈیزائن کے لحاظ سے لاپرواہی سے ہینڈل کیا جاتا ہے: وہ URLs میں ہوتے ہیں، جو براؤزر ہسٹری، سرور لاگز، ریفرر ہیڈرز اور اینالیٹکس میں چلے جاتے ہیں، اور چیٹ میسجز میں پیسٹ کیے جاتے ہیں۔ باقی ورژنز اس سے بھی بدتر امیدوار ہیں۔ ورژن 1 اور ورژن 7 دونوں تخلیق کے لمحے کو انکوڈ کرتے ہیں، لہذا جس کے پاس بھی یہ ہو وہ تقریباً جانتا ہے کہ اسے کب بنایا گیا تھا اور وہ اس کے ساتھ بننے والی ہر چیز کے دائرے کو محدود کر سکتا ہے۔ ورژن 3 اور 5 جان بوجھ کر ڈیٹرمنسٹک ہیں: کسی ای میل ایڈریس کا v5 UUID کوئی ہیش شدہ راز نہیں ہے، یہ ایک ایسی ویلیو ہے جسے وہی ایڈریس رکھنے والا کوئی بھی شخص ایک سیکنڈ میں حساب لگا سکتا ہے۔ کسی چیز کو نام دینے کے لیے UUID استعمال کریں۔ پاس ورڈ جنریٹر، یا رازوں کے لیے بنائی گئی لائبریری کا ٹوکن استعمال کریں، جب ویلیو کو پوشیدہ رکھنا ہو۔
یہ UUID جنریٹر کیوں منتخب کریں؟
- صرف براؤزر میں تخلیق: شناخت کار آپ کی ڈیوائس پر بنائے جاتے ہیں اور کبھی کہیں نہیں بھیجے جاتے
- Web Crypto API رینڈم نیس: کرپٹوگرافک طور پر محفوظ، Math.random() نہیں
- ایک جگہ پر پانچ ورژنز: ٹولز بدلے بغیر v1، v3، v4، v5 اور v7
- حقیقی طور پر ترتیب دیا گیا v7: ملی سیکنڈ کے اندر ایک کاؤنٹر، جیسا کہ RFC 9562 بیان کرتا ہے
- چار معیاری نیم اسپیسز یا آپ کے اپنے کے ساتھ ڈیٹرمنسٹک v3 اور v5
- ایک وقت میں 1000 تک، پچاس کے بعد ایک مختصر اسکرول کے قابل فہرست کے ساتھ
- ہر عام شکل: ہائفن کے ساتھ، بغیر ہائفن کے، بڑے حروف، قوسین کے ساتھ یا urn:uuid: URN
- لائنوں، کوما یا اقتباسات والی ویلیوز کے طور پر کاپی کریں جو سیدھے کوڈ میں پیسٹ ہو جاتی ہیں
- لامحدود اور مفت: کوئی سائن اپ نہیں، استعمال کی کوئی حد نہیں، ہمارے سرورز پر کچھ نہیں
UUIDs وہاں سامنے آتے ہیں جہاں کسی چیز کا نام رکھنا ضروری ہو اس سے پہلے کہ کوئی اس بات کی تصدیق کر سکے کہ نام خالی ہے۔ ایپلیکیشن کوڈ انہیں ان قطاروں کے لیے بناتا ہے جو وہ داخل کرنے والا ہوتا ہے، تاکہ اس چیز کی شناخت ڈیٹا بیس تک پہنچنے سے پہلے ہی ہو جائے اور کلائنٹ اس کا حوالہ دے سکے جبکہ رائٹ کا عمل جاری ہو۔ ڈسٹری بیوٹڈ سسٹمز ان پر زیادہ انحصار کرتے ہیں: کئی سروسز جو ایک ہی ٹیبل میں لکھ رہی ہوں، ہوائی جہاز پر ریکارڈز بنانے والا ایک آف لائن موبائل کلائنٹ، ایک قطار جسے اس پیغام کو پہچاننا ہے جسے اس نے پہلے ہی پروسیس کر لیا ہے — ان میں سے کوئی بھی ایک مشترکہ کاؤنٹر کے لیے اپنی باری کا انتظار نہیں کر سکتا۔ ورژن 5 ایک مختلف ضرورت پوری کرتا ہے، جو ایک مستحکم شناخت کار ہے جو کسی ایسی چیز سے اخذ کیا جاتا ہے جو آپ کے پاس پہلے سے موجود ہے: ایک ہی دستاویز، ایک ہی URL یا ایک ہی اکاؤنٹ ہمیشہ ایک ہی UUID پر میپ ہوتا ہے، لہذا ایک امپورٹ بغیر کسی چیز کو ڈپلیکیٹ کیے دو بار چل سکتا ہے۔ دوسری جگہوں پر وہ محض وہ فارمیٹ ہوتے ہیں جس کا سسٹم مطالبہ کرتا ہے — ایک ارتباطی شناخت کار جو لاگز اور ٹریسز میں سے گزرتا ہے، ایک فائل کا نام جو آپس میں نہیں ٹکرائے گا جب ایک ہزار صارفین کے اپ لوڈز ایک بکٹ میں جمع ہوں گے، ایک Windows رجسٹری کی، ایک ٹیسٹ فکسچر جسے اصلی ڈیٹا کی طرح دکھنا چاہیے۔
کچھ ایماندارانہ حدود کا جاننا ضروری ہے۔ ایک بیچ ایک ورژن ہے: 'ورژن' میں موجود ویلیو اس میں موجود ہر چیز پر لاگو ہوتی ہے، لہذا v4s کی ایک رن اور v7s کی ایک رن دو بیچز ہیں۔ یہ ایک جنریٹر ہے، انسپکٹر نہیں — کسی UUID کو پیسٹ کر کے اس کا ورژن یا اس کا ٹائم اسٹیمپ پڑھنا وہ کام نہیں ہے جو یہ صفحہ کرتا ہے۔ 'فائل میں محفوظ کریں' CSV یا JSON کے بجائے پلین ٹیکسٹ فائل لکھتا ہے۔ ورژن 7 کھلے عام یہ ظاہر کرتا ہے کہ اسے کب بنایا گیا تھا، ملی سیکنڈ تک، جو ایک حقیقی ٹریڈ آف ہے نہ کہ کوئی خامی، اور ورژن 1 بھی اسی طرح وقت لیک کرتا ہے؛ اگر یہ آپ کے ڈیٹا کے لیے مسئلہ ہے، تو ورژن 4 وہ ورژن ہے جو کسی کو کچھ نہیں بتاتا۔ معیار کی دو خصوصی ویلیوز ورژنز نہیں ہیں اور اس لیے 'ورژن' میں اختیارات نہیں ہیں، لیکن آپ انہیں یہاں سے کاپی کر سکتے ہیں: نل UUID، جو 00000000-0000-0000-0000-000000000000 ہے، اور میکس UUID، جو ffffffff-ffff-ffff-ffff-ffffffffffff ہے۔ اس صفحے پر موجود ہر چیز RFC 9562 کی پیروی کرتی ہے، وہ تفصیلات جس نے 2024 میں RFC 4122 کی جگہ لی، لہذا آؤٹ پٹ کو کوئی بھی لائبریری، ڈیٹا بیس یا API قبول کرتا ہے جو UUIDs کو ہینڈل کرتا ہے۔ ان حدود کے اندر ضمانت مضبوط ہے: ہر شناخت کار معیار کے مطابق، کرپٹوگرافک طور پر محفوظ بے ترتیبی سے، آپ کی اپنی مشین پر بنایا گیا ہے، اور کوئی اور اسے کبھی نہیں دیکھتا۔