UUID क्या है? v4 बनाम v7, UUID बनाम GUID और ULID

UUID (Universally Unique Identifier) एक 128-बिट वैल्यू है जो पाँच ग्रुप — 8-4-4-4-12 — में 32 हेक्साडेसिमल अंकों के रूप में लिखी जाती है, जैसे 3f2504e0-4f89-41d3-9a0c-0305e82c3301। इसे ऐसे डिज़ाइन किया गया है कि कोई भी, कहीं भी, बिना सेंट्रल रजिस्ट्री के इसे बना सके और भरोसा रख सके कि यह किसी दूसरे से टकराएगा नहीं। यही वजह है कि डिस्ट्रिब्यूटेड सिस्टम में डेटाबेस प्राइमरी key, लॉग में correlation id, फ़ाइल नाम और API रिसोर्स आइडेंटिफ़ायर के लिए UUID स्टैंडर्ड विकल्प है।

यह गाइड फ़ॉर्मेट, आज मायने रखने वाले वर्ज़न (v4 और v7), किसे कब चुनें, UUID की GUID और ULID से तुलना, और उन्हें जनरेट, वैलिडेट और स्टोर करने का तरीका बताती है।

UUID फ़ॉर्मेट

सभी UUID का लेआउट एक जैसा है, जिसे RFC 9562 (जिसने 2024 में RFC 4122 की जगह ली) परिभाषित करता है। तीसरा ग्रुप वर्ज़न अंक से शुरू होता है और चौथा ग्रुप वेरिएंट एन्कोड करता है; बाकी वर्ज़न-विशेष डेटा है।

नीचे के चित्र में तीसरे ग्रुप का पहला अंक V (वर्ज़न) और चौथे ग्रुप का पहला अंक N (वेरिएंट) के रूप में चिह्नित है, जो RFC UUID में हमेशा 8, 9, a या b होता है। पहला उदाहरण वर्ज़न 4 (रैंडम) UUID है और दूसरा वर्ज़न 7 (समय-क्रम वाला): तीसरे ग्रुप की शुरुआत में 4 या 7 देखें।

हर UUID में वर्ज़न अंक तीसरे ग्रुप की शुरुआत में और वेरिएंट चौथे ग्रुप की शुरुआत में होता है; v7 टाइमस्टैम्प से शुरू होता है, इसलिए बनने के समय से सॉर्ट होता है, जबकि v4 रैंडम है।

लेआउट: 8-4-4-4-12 hex अंक

xxxxxxxx-xxxx-भाग 1:Vxxx-भाग 2:Nxxx-xxxxxxxxxxxx

वर्ज़न 4 (रैंडम)

भाग 3:3f2504e0-4f89-भाग 1:4भाग 3:1d3-भाग 2:9भाग 3:a0c-0305e82c3301

वर्ज़न 7 (समय-क्रम वाला)

भाग 4:018f4a2c-9b3e-भाग 1:7भाग 3:d21-भाग 2:8भाग 3:c4f-1e2d3a4b5c6d

  1. 1वर्ज़न अंक (V)तीसरे ग्रुप का पहला अंक (हाइफ़न छोड़कर 13वाँ hex अंक): v4 उदाहरण में 4, v7 में 7।
  2. 2वेरिएंट अंक (N)चौथे ग्रुप का पहला अंक (17वाँ hex अंक): RFC UUID में हमेशा 8, 9, a या b (यहाँ 9 और 8)।
  3. 3रैंडम बिटv4 में बाकी सब: 122 रैंडम बिट। v7 में टाइमस्टैम्प के बाद वाले बिट।
  4. 448-बिट Unix मिलीसेकंड टाइमस्टैम्पसिर्फ़ v7 में: पहले 12 hex अंक। वैल्यू समय के साथ बढ़ती हैं, इसलिए नई रो B-tree इंडेक्स के अंत में आती हैं।2024-05-05T19:13:08.414Z
पाठ संस्करण
xxxxxxxx-xxxx-Vxxx-Nxxx-xxxxxxxxxxxx
              ^    ^
     version ─┘    └─ variant (8, 9, a or b for RFC UUIDs)

3f2504e0-4f89-41d3-9a0c-0305e82c3301   ← version 4 (random)
018f4a2c-9b3e-7d21-8c4f-1e2d3a4b5c6d   ← version 7 (time-ordered)

आज़माएँ: UUID जनरेटर

UUID वर्ज़न: v1, v4, v5 और v7

  • v1 — टाइमस्टैम्प और मशीन का MAC एड्रेस। यूनिक, लेकिन टेक्स्ट के रूप में सॉर्टेबल नहीं (टाइमस्टैम्प के निचले बिट पहले आते हैं; v6 उन्हें फिर से क्रम में रखता है), और यह हार्डवेयर एड्रेस और बनने का समय लीक करता है; नए सिस्टम में शायद ही इस्तेमाल होता है।
  • v4 — 122 रैंडम बिट। सबसे आम वर्ज़न: कोई तालमेल नहीं, कुछ लीक नहीं, बेहद सरल। इसकी एकमात्र कमज़ोरी यह है कि रैंडम key डेटाबेस इंडेक्स में इंसर्ट को बिखेर देती हैं।
  • v3 और v5 — नेमस्पेस और नाम को हैश करके बनते हैं (v3 के लिए MD5, v5 के लिए SHA-1)। एक ही इनपुट हमेशा एक ही UUID देता है, जो डिटरमिनिस्टिक id के लिए उपयोगी है।
  • v7 — 48-बिट Unix मिलीसेकंड टाइमस्टैम्प और उसके बाद रैंडम बिट। बनने के समय से सॉर्टेबल, इंडेक्स-फ़्रेंडली और फिर भी अप्रत्याशित। RFC 9562 नई डेटाबेस key के लिए इसकी सिफ़ारिश करता है।

आज़माएँ: UUID जनरेटर

UUID v4 बनाम v7: कौन-सा इस्तेमाल करें?

v7 तब इस्तेमाल करें जब UUID डेटाबेस प्राइमरी key हो या कुछ भी ऐसा जो इंडेक्स होकर हाल के हिसाब से क्वेरी होता है। क्योंकि v7 वैल्यू समय के साथ बढ़ती हैं, नई रो B-tree इंडेक्स के अंत में आती हैं, रैंडम जगहों पर नहीं, जिससे PostgreSQL, MySQL और SQL Server पर इंसर्ट तेज़ और पेज कैश-फ़्रेंडली रहते हैं। id से सॉर्ट करना बनने के समय से सॉर्ट करना भी बन जाता है।

v4 तब इस्तेमाल करें जब आइडेंटिफ़ायर को कुछ भी नहीं बताना चाहिए — यह भी नहीं कि वह लगभग कब बना — जैसे पब्लिक टोकन, अनसब्सक्राइब लिंक या कुछ भी जिसे हमलावर enumerate कर सकता है। बाकी सब के लिए 2026 में v7 सुरक्षित डिफ़ॉल्ट है।

आज़माएँ: UUID जनरेटर आज़माएँ: ULID जनरेटर

UUID बनाम GUID बनाम ULID

  • GUID उसी 128-बिट आइडेंटिफ़ायर का Microsoft वाला नाम है। .NET या SQL Server का GUID एक UUID ही है; फ़र्क़ सिर्फ़ दिखावटी हैं (ब्रेसेस, अपर केस) और कुछ Windows API में बाइट-ऑर्डर की एक ऐतिहासिक विचित्रता।
  • ULID एक वैकल्पिक 128-बिट id है जो 48-बिट टाइमस्टैम्प और 80 रैंडम बिट को Crockford Base32 में 26 कैरेक्टर के रूप में एन्कोड करता है (01ARZ3NDEKTSV4RRFFQ69G5FAV)। यह v7 की तरह सॉर्टेबल है और पढ़ने-टाइप करने में छोटा, लेकिन RFC स्टैंडर्ड नहीं है और जहाँ भी इस्तेमाल हो वहाँ लाइब्रेरी चाहिए।
  • ऑटो-इंक्रीमेंट इंटीजर छोटे और तेज़ हैं, लेकिन सेंट्रल सीक्वेंस माँगते हैं और बताते हैं कि कितने रिकॉर्ड मौजूद हैं। कई सिस्टम अंदर इंटीजर और बाहर UUID इस्तेमाल करते हैं।

आज़माएँ: ULID जनरेटर

क्या दो UUID टकरा सकते हैं?

v4 UUID में 122 रैंडम बिट होते हैं, यानी लगभग 5.3 × 10³⁶ संभावित वैल्यू। एक डुप्लिकेट की 50% संभावना तक पहुँचने के लिए आपको लगभग 2.7 × 10¹⁸ UUID बनाने होंगे — 86 साल तक हर सेकंड क़रीब एक अरब। व्यवहार में कॉलिज़न बग से आते हैं (सीडेड या ख़राब इम्प्लीमेंट किया रैंडम जनरेटर, कॉपी-पेस्ट की गई id), संयोग से कभी नहीं।

UUID जनरेट, वैलिडेट और स्टोर करना

  • प्लेटफ़ॉर्म से जनरेट करें: JavaScript में crypto.randomUUID(), Python में uuid.uuid4(), Java में java.util.UUID, PostgreSQL में gen_random_uuid()। सभी क्रिप्टोग्राफ़िक रूप से सुरक्षित सोर्स इस्तेमाल करते हैं।
  • शेप से वैलिडेट करें: 36 कैरेक्टर, hex अंक, 8, 13, 18 और 23 पोज़िशन पर हाइफ़न, 1–8 का वर्ज़न अंक और 8, 9, a या b का वेरिएंट अंक। लोअर केस कैनोनिकल रूप है।
  • नेटिव 16-बाइट टाइप में स्टोर करें (PostgreSQL में uuid, MySQL में BINARY(16), SQL Server में UNIQUEIDENTIFIER), 36-कैरेक्टर स्ट्रिंग में नहीं — इससे इंडेक्स साइज़ आधा हो जाता है।
  • यूज़र डेटा से UUID तब तक न निकालें जब तक v5 की डिटरमिनिज़्म न चाहिए, और v4 UUID को पासवर्ड जैसी सावधानी वाला सीक्रेट न मानें: यह अनुमान से परे है, लेकिन लॉग और URL में भी छपता है।

आज़माएँ: UUID जनरेटर आज़माएँ: रैंडम सीक्रेट जनरेटर आज़माएँ: SQL INSERT जनरेटर

अक्सर पूछे जाने वाले सवाल

UUID कैसा दिखता है?

36 कैरेक्टर: 8, 4, 4, 4 और 12 के पाँच हाइफ़न-अलग ग्रुप में 32 हेक्साडेसिमल अंक — जैसे 3f2504e0-4f89-41d3-9a0c-0305e82c3301।

क्या UUID और GUID एक ही हैं?

हाँ। GUID UUID स्टैंडर्ड से परिभाषित उसी 128-बिट आइडेंटिफ़ायर का Microsoft वाला शब्द है। ये एक-दूसरे की जगह इस्तेमाल हो सकते हैं।

डेटाबेस प्राइमरी key के लिए कौन-सा UUID वर्ज़न इस्तेमाल करें?

वर्ज़न 7। यह बनने के समय से सॉर्ट होता है, इसलिए इंसर्ट इंडेक्स के अंत में रहते हैं और तेज़ बने रहते हैं। वर्ज़न 4 काम करता है लेकिन बड़ी टेबल में इंडेक्स फ़्रैगमेंट करता है।

क्या UUID केस-सेंसिटिव है?

नहीं। हेक्साडेसिमल अंक किसी भी केस में एक ही वैल्यू हैं; कैनोनिकल टेक्स्ट रूप लोअर केस है, और ज़्यादातर डेटाबेस इनपुट पर नॉर्मलाइज़ कर देते हैं।

क्या UUID को पासवर्ड रीसेट टोकन के रूप में इस्तेमाल करना सुरक्षित है?

v4 UUID में 122 बिट रैंडमनेस है, जो पर्याप्त से ज़्यादा एंट्रॉपी है, और यह सुरक्षित रैंडम सोर्स से बनता है। स्वीकार्य है, लेकिन डेडिकेटेड रैंडम टोकन (बिना वर्ज़न बिट, लंबा) ज़्यादा साफ़ है। इसके लिए v1 या v7 कभी इस्तेमाल न करें — उनके टाइमस्टैम्प उन्हें आंशिक रूप से प्रेडिक्टेबल बनाते हैं।

UUID कितने बाइट का होता है?

बाइनरी रूप में 16 बाइट (128 बिट), या हाइफ़न के साथ टेक्स्ट में 36 बाइट। डेटाबेस सपोर्ट करे तो बाइनरी रूप स्टोर करें।

संदर्भ

इस गाइड में बताए गए टूल्स

UUID v4 (रैंडम) और v7 (समय-क्रमित) पहचानकर्ता थोक में बनाएँ और मौजूदा UUID वैलिडेट करें।

यूटिलिटीज़

ULID (सॉर्ट होने योग्य, 26 कैरेक्टर के पहचानकर्ता) बनाएँ और उनके टाइमस्टैम्प डिकोड करें।

यूटिलिटीज़

कस्टम प्रीफ़िक्स, लंबाई और कैरेक्टर सेट के साथ रैंडम API कीज़ बनाएँ।

सुरक्षा

सुरक्षित रैंडमनेस से मनचाही लंबाई, कैरेक्टर सेट और संख्या में रैंडम स्ट्रिंग बनाएँ।

यूटिलिटीज़

टेबल परिभाषा, नमूना पंक्तियों, CSV या JSON से INSERT स्टेटमेंट बनाएँ।

डेटाबेस

और गाइड

और गाइड
डेटाबेस

QA इंजीनियरों के लिए डेटाबेस टेस्टिंग

डेटाबेस कैसे टेस्ट करें: UI और API से CRUD जाँच, constraints, referential integrity, consistency, test data, performance और security।

16 मिनट पढ़ने का समय
डेटाबेस

टेस्टर्स के लिए SQL

QA के लिए व्यावहारिक SQL: count और sum reconciliation, orphan और duplicate पहचान, NULL और तारीख़ जाँच, dialect अंतर और सुरक्षित तरीके।

10 मिनट पढ़ने का समय
डेटाबेस

Transactions और DB migrations की टेस्टिंग

डेटाबेस transactions और migrations कैसे टेस्ट करें: atomicity, isolation levels और anomalies, concurrency, और सुरक्षित schema व data migrations।

13 मिनट पढ़ने का समय
JSON और डेटा

JSON क्या है?

JSON आसान भाषा में: यह क्या है, छह वैल्यू टाइप, वे सिंटैक्स नियम जिनमें लोग अटकते हैं, इसे फ़ॉर्मेट और वैलिडेट कैसे करें, और XML व YAML से इसकी तुलना।

5 मिनट पढ़ने का समय
सुरक्षा

JWT क्या है? JSON Web Token समझें

JWT आसान भाषा में: JSON Web Token के तीन हिस्से, exp और sub जैसे क्लेम, डिकोड और वेरिफ़ाई कैसे करें, डिकोड करना वेरिफ़ाई क्यों नहीं, और सिक्योरिटी।

5 मिनट पढ़ने का समय
एन्कोडिंग

Base64 क्या है? एन्कोडिंग समझें

Base64 समझें: यह क्या है और क्या नहीं, एन्कोडिंग कैसे काम करती है, आउटपुट एक-तिहाई क्यों बढ़ता है, Base64 बनाम Base64URL, = पैडिंग, और एन्कोड-डिकोड।

5 मिनट पढ़ने का समय