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 की जगह ली) परिभाषित करता है। तीसरा ग्रुप वर्ज़न अंक से शुरू होता है और चौथा ग्रुप वेरिएंट एन्कोड करता है; बाकी वर्ज़न-विशेष डेटा है।
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 वर्ज़न: v1, v4, v5 और v7
- v1 — टाइमस्टैम्प और मशीन का MAC एड्रेस। यूनिक और सॉर्टेबल, लेकिन हार्डवेयर एड्रेस और बनने का समय लीक करता है; नए सिस्टम में शायद ही इस्तेमाल होता है।
- v4 — 122 रैंडम बिट। सबसे आम वर्ज़न: कोई तालमेल नहीं, कुछ लीक नहीं, बेहद सरल। इसकी एकमात्र कमज़ोरी यह है कि रैंडम key डेटाबेस इंडेक्स में इंसर्ट को बिखेर देती हैं।
- v3 और v5 — नेमस्पेस और नाम को हैश करके बनते हैं (v3 के लिए MD5, v5 के लिए SHA-1)। एक ही इनपुट हमेशा एक ही UUID देता है, जो डिटरमिनिस्टिक id के लिए उपयोगी है।
- v7 — 48-बिट Unix मिलीसेकंड टाइमस्टैम्प और उसके बाद रैंडम बिट। बनने के समय से सॉर्टेबल, इंडेक्स-फ़्रेंडली और फिर भी अप्रत्याशित। RFC 9562 नई डेटाबेस key के लिए इसकी सिफ़ारिश करता है।
UUID v4 बनाम v7: कौन-सा इस्तेमाल करें?
v7 तब इस्तेमाल करें जब UUID डेटाबेस प्राइमरी key हो या कुछ भी ऐसा जो इंडेक्स होकर हाल के हिसाब से क्वेरी होता है। क्योंकि v7 वैल्यू समय के साथ बढ़ती हैं, नई रो B-tree इंडेक्स के अंत में आती हैं, रैंडम जगहों पर नहीं, जिससे PostgreSQL, MySQL और SQL Server पर इंसर्ट तेज़ और पेज कैश-फ़्रेंडली रहते हैं। id से सॉर्ट करना बनने के समय से सॉर्ट करना भी बन जाता है।
v4 तब इस्तेमाल करें जब आइडेंटिफ़ायर को कुछ भी नहीं बताना चाहिए — यह भी नहीं कि वह लगभग कब बना — जैसे पब्लिक टोकन, अनसब्सक्राइब लिंक या कुछ भी जिसे हमलावर enumerate कर सकता है। बाकी सब के लिए 2026 में v7 सुरक्षित डिफ़ॉल्ट है।
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 इस्तेमाल करते हैं।
क्या दो UUID टकरा सकते हैं?
v4 UUID में 122 रैंडम बिट होते हैं, यानी लगभग 5.3 × 10³⁶ संभावित वैल्यू। एक डुप्लिकेट की 50% संभावना तक पहुँचने के लिए आपको लगभग 2.7 × 10¹⁸ UUID बनाने होंगे — एक सदी तक हर सेकंड अरबों। व्यवहार में कॉलिज़न बग से आते हैं (सीडेड या ख़राब इम्प्लीमेंट किया रैंडम जनरेटर, कॉपी-पेस्ट की गई 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 कैरेक्टर के पहचानकर्ता) बनाएँ और उनके टाइमस्टैम्प डिकोड करें।
hex, Base64 या Base64url में क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम सीक्रेट बनाएँ।
कस्टम प्रीफ़िक्स, लंबाई और कैरेक्टर सेट के साथ रैंडम API कीज़ बनाएँ।
सुरक्षित रैंडमनेस से मनचाही लंबाई, कैरेक्टर सेट और संख्या में रैंडम स्ट्रिंग बनाएँ।
टेबल परिभाषा, नमूना पंक्तियों, CSV या JSON से INSERT स्टेटमेंट बनाएँ।