UUIDs بنائیں
نجی — آپ کی فائل کبھی محفوظ نہیں کی جاتی
کون سا ورژن؟
آپ کے 0 UUIDs یہاں نظر آئے گا۔
یہ کیسے کام کرتا ہے
ورژن چنیں
جو چیز ناقابلِ اندازہ ہونی چاہیے اس کے لیے v4۔ ڈیٹا بیس کیز کے لیے v7۔ فرق فرض کرنے کے بجائے صفحے پر سمجھایا گیا ہے۔
تعداد چنیں
ایک، یا ایک ساتھ دس ہزار تک، اختیاری فارمیٹنگ کے ساتھ — UPPERCASE، بریسز، بغیر ہائفن، یا کوڈ کے لیے تیار کوٹس والی فہرست۔
کاپی کریں
سب کاپی کریں، یا ٹیکسٹ فائل کے طور پر ڈاؤن لوڈ کریں۔
ورژن 4 یا ورژن 7، اور ڈیٹا بیس میں اس کی اہمیت کیوں ہے
UUID ایک 128 بٹ ویلیو ہے جو جانی پہچانی 8-4-4-4-12 گروپنگ میں 32 ہیکس ہندسوں کے طور پر لکھی جاتی ہے۔ ان میں سے چھ بٹس یہ بتانے میں خرچ ہوتے ہیں کہ یہ کون سا ورژن اور ویریئنٹ ہے، جس سے ورژن 4 میں 122 رینڈم بٹس بچتے ہیں — اتنے کہ آپ ایک صدی تک ہر سیکنڈ ایک ارب بنائیں تب بھی ایک ہی UUID دو بار دیکھنے کا امکان انتہائی کم رہے۔ یہی اس کی ساری کشش ہے: دو سسٹم جنہوں نے کبھی آپس میں بات نہیں کی، دونوں شناخت کنندگان بنا سکتے ہیں اور بے فکر ہو کر مان سکتے ہیں کہ وہ کبھی ٹکرائیں گے نہیں۔
اس کے لیے رینڈم پن کا اصلی ہونا ضروری ہے، اور یہاں یہ کسی عام رینڈم نمبر جنریٹر کے بجائے کرپٹوگرافک رینڈم سورس سے آتا ہے۔ یہ فرق تب اہم ہوتا ہے جب شناخت کنندگان رسائی کے ٹوکنز کے طور پر استعمال ہوں — پاس ورڈ ری سیٹ لنک، ناقابلِ اندازہ شیئر URL — کیونکہ قابلِ پیش گوئی جنریٹر کسی کو پچھلی ویلیوز سے اگلی ویلیو نکالنے دیتا ہے۔ کرپٹوگرافک سورس کے ساتھ پیش گوئی کے لیے کچھ نہیں ہوتا۔
ورژن 7 اس لیے موجود ہے کہ ورژن 4 ڈیٹا بیس پرائمری کی کے طور پر برا برتاؤ کرتا ہے۔ یہ شروع میں 48 بٹ ملی سیکنڈ ٹائم اسٹیمپ رکھتا ہے اور باقی کو رینڈم پن سے بھرتا ہے، اس لیے ترتیب سے بنائے گئے UUIDs اسی ترتیب میں sort ہوتے ہیں جس میں وہ بنے۔ یہ بات صرف ظاہری لگتی ہے مگر ہے نہیں: رینڈم کی ہر insert کو پورے انڈیکس میں بکھیر دیتی ہے، اس لیے ہر write ایک مختلف صفحے کو چھوتا ہے اور کیش کام آنا بند ہو جاتا ہے، جبکہ وقت کی ترتیب والی کی ایک ہی سرے پر جڑتی جاتی ہے۔ بڑے ٹیبل پر insert کی رفتار میں فرق نمایاں ہوتا ہے، اور v7 کو معیاری بنانے کی یہی وجہ ہے۔
یہ سودا حقیقی ہے اور اسے تولنا چاہیے۔ ورژن 7 کا UUID دیکھنے والے ہر شخص کو بتا دیتا ہے کہ یہ تقریباً کب بنا، ملی سیکنڈ تک، اور ان کا ایک سلسلہ ظاہر کر دیتا ہے کہ آپ کتنی تیزی سے ریکارڈز بناتے ہیں۔ اندرونی کی کے لیے یہ ٹھیک ہے۔ URL میں ظاہر ہونے والے شناخت کنندہ کے لیے — آرڈر نمبر، دستاویز کا لنک، یوزر id — یہ معلومات کا ایک چھوٹا سا اخراج ہے جو ورژن 4 میں نہیں ہوتا۔ اگر دونوں باتیں اہم ہوں تو پرائمری کی کے لیے v7 اور ہر عوامی چیز کے لیے v4 استعمال کریں۔
جب آپ کو کچھ اور چاہیے
انہیں وہیں بنائیں جہاں وہ استعمال ہوتے ہیں۔ ہر ڈیٹا بیس اور زبان میں یہ بلٹ اِن ہے — PostgreSQL میں gen_random_uuid()، MySQL میں UUID()، JavaScript میں crypto.randomUUID()، Python میں uuid.uuid4() — اور براؤزر میں ایک بیچ بنا کر کوڈ میں پیسٹ کرنا کسی fixture یا ٹیسٹ کے لیے ٹھیک ہے، مگر کسی بھی چلنے والی چیز کے لیے غلط۔
اگر v7 کی وجہ sort ہونے والی کیز ہیں تو کچھ متبادل جاننے کے لائق ہیں۔ ULID یہی خیال 26 حروف میں رکھتا ہے جو چھوٹے اور case-insensitive ہیں؛ Snowflake شناخت کنندگان 64 بٹس میں آ جاتے ہیں، جو UUID کے 128 کے مقابلے میں انڈیکس کا سائز آدھا کر دیتے ہیں۔ اور بہت سے ڈیٹا بیسز میں ایک عام auto-increment ہونے والا integer اب بھی ان سب سے تیز اور چھوٹا ہے — UUIDs اپنی قیمت کے قابل تب ہیں جب شناخت کنندگان ایک ساتھ کئی جگہوں پر بنانے ہوں، ورنہ نہیں۔
اکثر پوچھے جانے والے سوالات
v4 یا v7 — مجھے کون سا چاہیے؟
اگر یہ ڈیٹا بیس پرائمری کی ہے تو v7۔ اگر اس کا اندازہ لگانا ناممکن ہونا چاہیے — پاس ورڈ ری سیٹ لنک، انوائٹ کوڈ، سیشن شناخت کنندہ — تو v4۔ بس یہی پورا فیصلہ ہے، اور زیادہ تر لوگوں کو پتا ہی نہیں چلتا کہ کوئی فیصلہ کرنا تھا، کیونکہ تقریباً ہر جنریٹر صرف v4 دیتا ہے۔
ڈیٹا بیس کی کے طور پر v4 برا کیوں ہے؟
کیونکہ یہ مکمل طور پر رینڈم ہے، اور ڈیٹا بیس انڈیکس ترتیب وار ہوتا ہے۔ نئی رینڈم کیز انڈیکس میں بے ترتیب جگہوں پر پہنچتی ہیں، اس لیے ہر insert ایک مختلف صفحے کو چھوتا ہے، کیش کام آنا بند ہو جاتا ہے، اور انڈیکس بکھر کر بڑھتا جاتا ہے۔ بڑے اور مصروف ٹیبل پر یہ ایک قابلِ پیمائش سستی ہے جو وقت کے ساتھ بڑھتی جاتی ہے۔ یہ کوئی نظریاتی خدشہ نہیں — اسی وجہ سے اب Postgres اور MySQL دونوں کی دستاویزات اس پر بات کرتی ہیں۔
UUID v7 کیا ہے؟
ایسا UUID جس کے پہلے 48 بٹس ملی سیکنڈ ٹائم اسٹیمپ ہوتے ہیں، اور اس کے بعد رینڈم پن۔ یہ اب بھی عالمی طور پر منفرد اور 128 بٹس کا ہے، لیکن چونکہ وقت پہلے آتا ہے، v7 UUIDs اسی ترتیب میں sort ہوتے ہیں جس میں وہ بنے۔ نئی کیز انڈیکس میں بکھرنے کے بجائے اس کے آخر میں جڑتی ہیں، بالکل جیسے auto-increment ہونے والا integer برتاؤ کرتا ہے — UUID کی انفرادیت کے ساتھ۔ اسے 2024 میں RFC 9562 میں معیاری بنایا گیا اور نئے ٹیبلز کے لیے یہی موجودہ سفارش ہے۔
کیا یہاں کے v7 UUIDs واقعی sort ہوتے ہیں؟
جی ہاں، ایک ہی ملی سیکنڈ کے اندر بھی، اور زیادہ تر امپلیمینٹیشنز یہی حصہ غلط کرتی ہیں۔ ٹائم اسٹیمپ کی ریزولوشن صرف ملی سیکنڈ ہے، اس لیے لوپ میں ہزار IDs بنانا ایک ہی ملی سیکنڈ میں ختم ہو جاتا ہے — اور خالص رینڈم نچلے بٹس کے ساتھ وہ ہزار اس ترتیب میں sort نہیں ہوتے جس میں بنے تھے۔ یہ جنریٹر RFC 9562 میں بیان کردہ monotonic کاؤنٹر استعمال کرتا ہے، اس لیے ہر بیچ ہمیشہ سختی سے صعودی ترتیب میں ہوتا ہے۔ ہزار بنائیں اور انہیں sort کریں؛ وہ اسی ترتیب میں واپس آئیں گے جس میں بنے تھے۔
کیا v7 UUID کو عوامی طور پر ظاہر کرنا محفوظ ہے؟
ایک بات ذہن میں رکھ کر: یہ ڈیزائن کے مطابق ظاہر کرتا ہے کہ یہ کب بنا، ملی سیکنڈ تک۔ ڈیٹا بیس کی کے لیے یہ عموماً بے ضرر بلکہ مفید ہوتا ہے۔ لیکن اگر بننے کا وقت خود حساس ہو، یا آپ کو شناخت کنندہ ناقابلِ اندازہ چاہیے، تو v4 استعمال کریں — v7 میں اب بھی 74 رینڈم بٹس ہیں، جو بہت زیادہ ہیں، مگر اس کا ٹائم اسٹیمپ ہر اس شخص کے لیے صاف پڑھا جا سکتا ہے جس کے پاس ID ہو۔
کیا یہ محفوظ ہونے کے لیے کافی رینڈم ہیں؟
جی ہاں۔ رینڈم پن `crypto.getRandomValues` سے آتا ہے، جو براؤزر کا کرپٹوگرافک طور پر محفوظ جنریٹر ہے، کبھی `Math.random` سے نہیں۔ اس فرق کی وجہ سے حقیقی کمزوریاں سامنے آ چکی ہیں: `Math.random` تیز ہے مگر قابلِ پیش گوئی، اور اس پر بنے سیشن ٹوکنز کا عملاً اندازہ لگایا جا چکا ہے۔ v4 UUID میں 122 رینڈم بٹس ہوتے ہیں، جو اتنے ہیں کہ ٹکراؤ کوئی عملی مسئلہ نہیں۔
کیا یہ میرے ڈیوائس پر بنتے ہیں؟
جی ہاں، مکمل طور پر، اور شناخت کنندگان کے لیے یہ اہم ہے۔ کسی اور کے سرور سے لایا گیا UUID ایسا UUID ہے جسے کوئی اور دیکھ چکا ہے — اگر آپ کوئی سیکرٹ بنا رہے ہیں تو اس سے مقصد ہی فوت ہو جاتا ہے۔ یہ کبھی آپ کے براؤزر سے باہر نہیں جاتے۔ صفحہ لوڈ ہونے کے بعد اپنا Wi-Fi بند کر دیں، یہ بالکل ویسے ہی کام کرے گا۔ ہماری بات پر یقین کرنے کے بجائے پرائیویسی کے دعوے کو خود پرکھنے کا یہ سب سے آسان طریقہ ہے۔
nil UUID کیا ہے؟
سب صفر: 00000000-0000-0000-0000-000000000000۔ یہ ایک درست، مخصوص UUID ہے جو وہاں “کچھ نہیں” یا “سیٹ نہیں” کے معنی میں استعمال ہوتا ہے جہاں null ممکن نہ ہو۔ اس کا الٹ، max UUID جس میں سب f ہوتے ہیں، کبھی کبھی ترتیب میں آخری حد (sentinel) کے طور پر استعمال ہوتا ہے۔ دونوں یہاں دیے گئے ہیں کیونکہ کبھی کبھار ان کی ضرورت پڑتی ہے اور انہیں درست ٹائپ کرنا مشکل ہوتا ہے۔
جاننا مفید ہے: ورژن 4 کے UUIDs براؤزر کے کرپٹوگرافک رینڈم سورس سے آتے ہیں، Math.random سے نہیں، اس لیے انہیں شناخت کنندہ کے طور پر استعمال کرنا محفوظ ہے۔ ورژن 7 میں ملی سیکنڈ کا ٹائم اسٹیمپ شامل ہوتا ہے، جو اسے اچھی طرح ترتیب دینے کے قابل بناتا ہے — اور اس کا مطلب یہ بھی ہے کہ یہ ظاہر کر دیتا ہے کہ یہ تقریباً کب بنا۔ جہاں یہ اہم ہو وہاں v7 استعمال نہ کریں۔
یہ ٹول اپنی ویب سائٹ پر لگائیں
کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔