دیکھ رہے ہیں: اردو انگریزی پر جائیں

UUID جنریٹر

اپنے براؤزر میں v4 (رینڈم) یا v7 (وقت کے ترتیب سے) UUID بنائیں۔ رینڈم نیس کے لیے Web Crypto API استعمال کرتا ہے۔

  1. رینڈم UUID کے لیے v4 یا وقت کے ترتیب والے کے لیے v7 منتخب کریں۔
  2. تعداد سیٹ کریں (1000 تک) اور بنائیں پر کلک کریں۔
  3. پوری فہرست لینے کے لیے سب کاپی کریں استعمال کریں، یا ایک لائن دستی طور پر منتخب کریں۔
یہ کیا کرتا ہے؟

v4 UUID 122 بٹس کی کرپٹوگرافک طور پر مضبوط رینڈم نیس ہیں — idempotency کیز، سیشن IDs، اور جہاں بھی آپ کو مبہم، غیر ترتیب شدہ شناخت کنندہ درکار ہو اس کا ہر جگہ ڈیفالٹ۔ v7 UUID آغاز کی بائٹس میں 48-بٹ Unix-millisecond ٹائم اسٹیمپ ایمبیڈ کرتے ہیں، تو وقت میں قریب بنائی گئی ویلیوز لیکسیکوگرافک ترتیب میں قریب ترتیب دیتی ہیں۔ یہ v7 کو ڈیٹابیس پرائمری کیز کے لیے بہتر بناتا ہے، جہاں انسرٹس بصورت دیگر B-tree انڈیکس کو بکھیر سکتے ہیں۔

مثال

تین v4 UUID (رینڈم، کوئی ترتیب نہیں):

f47ac10b-58cc-4372-a567-0e02b2c3d479
6ba7b810-9dad-11d1-80b4-00c04fd430c8
d1b2c3e4-5678-4abc-9def-0123456789ab

ایک ہی millisecond میں بنے تین v7 UUID (مشترکہ پریفکس نوٹ کریں):

018f8e50-fcaa-7c3c-8d2a-6f5b72e1fd90
018f8e50-fcaa-7c3d-a41f-8c9b07e2c0d1
018f8e50-fcab-7c01-b3e7-1d9a4f5c6e82

عام غلطیاں اور نقصانات

یہ وہ حقیقی مسائل ہیں جو ڈیولپرز کو ایپلیکیشن میں UUID لگاتے وقت پیش آتے ہیں:

  • جہاں انسرشن کی ترتیب اہم ہو وہاں v4 استعمال کرنا۔ 10 ملین رینڈم v4 کو انڈیکس کرنا B-tree میں بھاری پیج اسپلٹس کا سبب بنتا ہے۔ اگر آپ v4 رکھتے ہیں، یا تو رائٹ ایمپلیفیکیشن کے ساتھ جیئیں یا پرائمری کی کو v7 میں بدلیں۔
  • ہائفنز ہٹانا اور ورژن nibble کھو دینا۔ f47ac10b58cc4372a5670e02b2c3d479 اب بھی ایک درست 32-کیریکٹر hex UUID ہے، لیکن 13واں کیریکٹر (4) ورژن مارکر ہے — رینڈم nibble نہیں۔ یہ نہ سمجھیں کہ تمام 32 کیریکٹرز رینڈم ہیں۔
  • Math.random() پر انحصار کرنا۔ Math.random() پر بنی پرانی لائبریریاں کرپٹوگرافک طور پر مضبوط نہیں ہیں اور قابل پیش گوئی ہو سکتی ہیں۔ crypto.randomUUID() (براؤزرز اور Node 19+) یا crypto سے پڑھنے والی v7 لائبریری استعمال کریں۔
  • v7 کو ٹائم اسٹیمپ سمجھنا۔ آغاز کے 48 بٹس وقت لے جاتے ہیں لیکن باقی رینڈم ہے، تو ایک ہی millisecond والے دو v7 deterministic طریقے سے ترتیب نہیں دیے گئے۔ tie-breaking پر بھروسہ نہ کریں۔
  • VARCHAR(36) کے طور پر ذخیرہ کرنا۔ یہ کام کرتا ہے لیکن نیٹو 16-بائٹ UUID / BINARY(16) کالم کے مقابلے میں ذخیرہ کو دگنا کرتا ہے اور joins کو سست کرتا ہے۔ ڈیٹابیس کی نیٹو ٹائپ استعمال کریں (Postgres میں uuid، SQL Server میں UNIQUEIDENTIFIER)۔
  • مخصوص ورژن کی ضرورت والا regex۔ /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-.../i صرف v4 سے میل کھاتا ہے۔ اگر آپ بعد میں v7 جاری کرتے ہیں، تو وہ regex خاموشی سے درست IDs کو مسترد کر دیتا ہے۔
اکثر پوچھے جانے والے سوالات

UUID v4 اور v7 میں کیا فرق ہے؟

v4 122 بٹس کی رینڈم نیس ہے ساتھ میں ورژن اور variant مارکرز، وقت کا کوئی جزو نہیں۔ v7 48-بٹ Unix-millisecond ٹائم اسٹیمپ کو پریفکس کرتا ہے اور باقی کو رینڈم بٹس سے بھرتا ہے، تو وقت میں قریب بنائی گئی v7 ویلیوز لیکسیکوگرافک طور پر ترتیب دیتی ہیں۔ B-tree انسرٹس کو مقامی رکھنے کے لیے v7 کو ڈیٹابیس پرائمری کی کے طور پر استعمال کریں؛ جب آپ کوئی ترتیب سگنل نہیں چاہتے تو v4 استعمال کریں۔

کیا مجھے کبھی نقل شدہ UUID ملے گا؟

عملی طور پر نہیں۔ v4 UUID میں 122 رینڈم بٹس ہیں، تو ایک ارب کے بیچ میں دو کے ٹکرانے کا امکان تقریباً 10^-18 ہے۔ ایک تصادم کے 50% امکان تک پہنچنے سے پہلے آپ کو تقریباً 2.7 کوئنٹلین v4 UUID بنانے ہوں گے۔ منفرد جنریشن کو دیا ہوا سمجھیں اور uniqueness چیک شامل نہ کریں۔

کیا v4 کرپٹوگرافک طور پر رینڈم ہے؟

یہ ٹول crypto.randomUUID() استعمال کرتا ہے جسے spec کے مطابق کرپٹوگرافک طور پر مضبوط PRNG سے لینا ضروری ہے۔ یہ سیشن IDs، idempotency کیز، اور زیادہ تر سیکیورٹی ٹوکنز کے لیے کافی ہے۔ یہ signed token یا لمبی API secret کا متبادل نہیں ہے، اور آپ کو UUID سے encryption keys اخذ نہیں کرنی چاہئیں۔

کیا UUID v7 معیاری ہے؟

ہاں۔ UUID v7 RFC 9562 (مئی 2024) میں بیان کیا گیا ہے، جس نے RFC 4122 کی جگہ لی اور اصل ورژنز کے ساتھ v6، v7، اور v8 کو باضابطہ بنایا۔ زیادہ تر جدید زبانوں میں v7 کے نفاذ ہیں — Postgres، MySQL، اور SQL Server سبھی UUID کالم کے طور پر v7 ویلیوز کو بغیر کسی تبدیلی کے قبول کرتے ہیں۔

بائنری فارم کیسی لگتی ہے اور کیا endianness اہم ہے؟

ایک UUID 16 بائٹ ہے۔ معیاری ٹیکسٹ فارم انہیں 8-4-4-4-12 hex کیریکٹرز کے طور پر گروپ کرتا ہے۔ بائٹس RFC 9562 کے مطابق نیٹ ورک (big-endian) ترتیب میں لکھے جاتے ہیں، تو 018f8e50-fcaa-7c3c-8d2a-6f5b72e1fd90 بائٹ 0x01 سے شروع ہوتا ہے۔ Microsoft GUIDs تاریخی طور پر پہلے تین گروپس میموری میں little-endian ذخیرہ کرتے ہیں — .NET بائنری ڈمپس کے ساتھ interop کرتے وقت محتاط رہیں۔

کیا آپ اس ٹول کے بنائے ہوئے UUID محفوظ کرتے ہیں؟

نہیں۔ آپ یہاں جو UUID بناتے ہیں ہم انہیں محفوظ نہیں کرتے۔ ہر ویلیو آؤٹ پٹ ایریا میں دکھائی جاتی ہے اور جیسے ہی آپ ریفریش کرتے ہیں یا ٹیب بند کرتے ہیں ختم ہو جاتی ہے — کچھ محفوظ نہیں ہوتا، ویلیوز پر کوئی ٹیلی میٹری جمع نہیں ہوتی۔ آپ اپنے براؤزر کے ڈیولپر ٹولز میں تصدیق کرنے کے لیے خوش آمدید ہیں۔