ऑनलाइन UUID जनरेटर - सभी संस्करण (v1-v7) मुफ्त में बनाएं

UUID क्या है?

UUID (यूनिवर्सली यूनिक आइडेंटिफ़ायर) एक 128-बिट पहचानकर्ता है जिसका उपयोग कंप्यूटर सिस्टम में जानकारी को विशिष्ट रूप से पहचानने के लिए किया जाता है। UUID को RFC 4122 के अनुसार मानकीकृत किया गया है और इसकी विशाल एन्ट्रॉपी के कारण टकराव की संभावना लगभग शून्य है - इसका मतलब है कि दो स्वतंत्र रूप से जेनरेट किए गए UUID लगभग निश्चित रूप से अद्वितीय होंगे।

UUID का एक मानक प्रारूप है: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, जहाँ प्रत्येक x एक हेक्साडेसिमल अंक (0-9, a-f) है, M UUID संस्करण को इंगित करता है, और N वैरिएंट को इंगित करता है।

UUID के संस्करण

UUID v1 (टाइमस्टैम्प + MAC पता)

UUID v1 वर्तमान टाइमस्टैम्प और एक यादृच्छिक मान (ब्राउज़र में MAC पते के बजाय) पर आधारित है। यह 15 अक्टूबर 1582 (ग्रेगोरियन कैलेंडर) से 100-नैनोसेकंड अंतराल का उपयोग करता है।

उपयोग:

  • ऐसी स्थितियाँ जहाँ आपको UUIDs का कालानुक्रमिक क्रमबद्धीकरण चाहिए
  • डिबगिंग और लॉगिंग (UUID में निर्माण समय की जानकारी होती है)
  • टाइम सिंक्रोनाइजेशन के साथ वितरित सिस्टम

उदाहरण: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

फायदे:

  • UUID को निर्माण समय के अनुसार कालानुक्रमिक रूप से क्रमबद्ध किया जा सकता है
  • ऑडिट और डिबगिंग के लिए उपयोगी
  • टाइमस्टैम्प जानकारी शामिल है

नुकसान:

  • संभावित सुरक्षा जोखिम – इसमें टाइमस्टैम्प होता है
  • ब्राउज़र में वास्तविक MAC पता शामिल नहीं है (यादृच्छिक मान से प्रतिस्थापित)
  • खराब DB लोकेलिटी (टाइमस्टैम्प लो-ऑर्डर बिट्स में है)

UUID v3 (MD5 हैश)

UUID v3 को नेमस्पेस UUID और नाम के MD5 हैश का उपयोग करके जेनरेट किया जाता है। नियतात्मक – समान नेमस्पेस + नाम हमेशा समान UUID बनाएगा।

उपयोग:

  • URL, DNS नाम या अन्य पहचानकर्ताओं को UUID में बदलना
  • ऐसी स्थितियाँ जहाँ आपको प्रतिलिपि योग्य UUID चाहिए
  • विभिन्न पहचान प्रणालियों के बीच मैपिंग

उदाहरण: a3bb189e-8bf9-3888-9912-ace4e6543002

फायदे:

  • नियतात्मक (समान इनपुट = समान आउटपुट)
  • ज्ञात पहचानकर्ताओं को बदलने के लिए आदर्श
  • विभिन्न इनपुट के लिए कोई टकराव नहीं

नुकसान:

  • MD5 एक अप्रचलित एल्गोरिथम है (v5 को प्राथमिकता दें)
  • नेमस्पेस और नाम की आवश्यकता होती है
  • मूल इनपुट को वापस प्राप्त नहीं किया जा सकता है

UUID v4 (यादृच्छिक) - अनुशंसित

UUID का सबसे अधिक उपयोग किया जाने वाला संस्करण। UUID v4 को क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर (crypto.getRandomValues()) का उपयोग करके पूरी तरह से यादृच्छिक रूप से जेनरेट किया जाता है।

उपयोग:

  • डेटाबेस प्राथमिक कुंजी
  • सत्र पहचानकर्ता (session IDs)
  • अद्वितीय फ़ाइल नाम
  • API टोकन
  • सामान्य प्रयोजन, जहाँ आपको सुनिश्चित रूप से अद्वितीय ID की आवश्यकता होती है

उदाहरण: f47ac10b-58cc-4372-a567-0e02b2c3d479

फायदे:

  • अधिकतम एन्ट्रॉपी और सुरक्षा
  • समय या सिस्टम मापदंडों पर कोई निर्भरता नहीं
  • सबसे सरल कार्यान्वयन

टकराव की संभावना: 100 वर्षों तक प्रति सेकंड 1 बिलियन UUID जनरेट करने पर, टकराव की संभावना लगभग 0.00000006% है।

UUID v5 (SHA-1 हैश)

UUID v5, v3 के समान है, लेकिन MD5 के बजाय SHA-1 का उपयोग करता है। v3 का एक अधिक आधुनिक और सुरक्षित विकल्प।

उपयोग:

  • v3 के समान, लेकिन बेहतर सुरक्षा के साथ
  • नई परियोजनाओं के लिए v3 की तुलना में पसंदीदा
  • URL, DNS नाम, OID, X.500 DN से UUID जनरेट करना

उदाहरण: 886313e1-3b8a-5372-9b90-0c9aee199e5d

फायदे:

  • नियतात्मक
  • SHA-1 MD5 से अधिक मजबूत है
  • प्रणालियों के बीच मैपिंग के लिए उपयुक्त

नुकसान:

  • SHA-1 को भी अप्रचलित माना जाता है (लेकिन MD5 से अभी भी अधिक सुरक्षित)
  • नेमस्पेस और नाम की आवश्यकता होती है

UUID v6 (क्रमबद्ध टाइमस्टैम्प)

UUID v6, v1 का एक बेहतर संस्करण है जिसमें बेहतर DB इंडेक्सिंग के लिए टाइम बिट्स को पुनर्व्यवस्थित किया गया है। डेटाबेस में लोकेलिटी समस्याओं को हल करने के लिए डिज़ाइन किया गया है।

उपयोग:

  • टाइम-ऑर्डरिंग के साथ डेटाबेस प्राथमिक कुंजी
  • कालानुक्रमिक क्रमबद्धीकरण और DB प्रदर्शन की आवश्यकता वाले सिस्टम
  • v1 का अधिक आधुनिक विकल्प

उदाहरण: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

फायदे:

  • v1 की तुलना में बेहतर DB लोकेलिटी (टाइमस्टैम्प हाई-ऑर्डर बिट्स में)
  • कालानुक्रमिक क्रमबद्धीकरण
  • UUID मानक के साथ संगत

नुकसान:

  • v1/v4 की तुलना में कम उपयोग किया जाता है
  • अभी भी समय की जानकारी शामिल है (सुरक्षा जोखिम)

UUID v7 (यूनिक्स टाइमस्टैम्प)

UUID v7 यूनिक्स टाइमस्टैम्प (1970 से मिलीसेकंड) + यादृच्छिक बिट्स का उपयोग करता है। सभी UUID संस्करणों में सबसे अच्छा DB लोकेलिटी वाला सबसे नया संस्करण।

उपयोग:

  • आधुनिक डेटाबेस प्राथमिक कुंजी
  • प्रदर्शन + टाइम-ऑर्डरिंग की आवश्यकता वाले सिस्टम
  • नई परियोजनाओं में v1/v6 का प्रतिस्थापन

उदाहरण: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

फायदे:

  • सभी संस्करणों में सबसे अच्छी DB लोकेलिटी
  • यूनिक्स टाइमस्टैम्प मानक है
  • यादृच्छिकता और टाइम-ऑर्डरिंग के फायदों को जोड़ता है

नुकसान:

  • अपेक्षाकृत नया विनिर्देश (RFC 4122bis)
  • लेगेसी सिस्टम में कम समर्थित

UUID का कौन सा संस्करण उपयोग करें?

निर्णय गाइड

क्या आपको अधिकतम सुरक्षा और यादृच्छिकता चाहिए?UUID v4 का उपयोग करें (सबसे आम विकल्प)

क्या आपको टाइम-ऑर्डरिंग और DB प्रदर्शन चाहिए?UUID v7 (आधुनिक) या UUID v6 (मानक) का उपयोग करें

क्या आपको मौजूदा पहचानकर्ताओं से प्रतिलिपि योग्य UUID चाहिए?UUID v5 (SHA-1) या UUID v3 (MD5, लेगेसी) का उपयोग करें

क्या आपको टाइमस्टैम्प और ऑडिट ट्रेल चाहिए?UUID v1 (लेगेसी, खराब DB प्रदर्शन) का उपयोग करें

डेटाबेस

नई परियोजनाओं के लिए: UUID v7 या v4

  • v7 टाइम-ऑर्डरिंग + प्रदर्शन के लिए आदर्श है
  • v4 बिना समय की जानकारी के अधिकतम यादृच्छिकता के लिए

लेगेसी सिस्टम के लिए: UUID v1 या v6

  • v6 में v1 की तुलना में बेहतर DB लोकेलिटी है
  • v1 व्यापक रूप से समर्थित है

प्राथमिक कुंजी के रूप में UUID के फायदे:

  • वैश्विक विशिष्टता – आप बिना किसी टकराव के विभिन्न डेटाबेस से डेटा को जोड़ सकते हैं
  • सुरक्षा – अनुक्रमिक ID (1, 2, 3…) के विपरीत, अगले मानों का अनुमान नहीं लगाया जा सकता है
  • वितरित सिस्टम – UUID को बिना समन्वय के कई सर्वरों पर स्वतंत्र रूप से जनरेट किया जा सकता है
  • डेटाबेस मर्ज करना – दो डेटाबेस को मर्ज करते समय कोई टकराव नहीं होता है

नुकसान:

  • बड़ा आकार (इंटीजर के लिए 4-8 बाइट्स बनाम 16 बाइट्स)
  • कुछ डेटाबेस में धीमा इंडेक्सिंग (बेहतर प्रदर्शन के लिए v6/v7 का उपयोग करें)
  • मनुष्यों के लिए कम पठनीय

API और वेब सेवाएँ

  • REST API – संसाधनों के लिए अद्वितीय पहचानकर्ता
  • GraphQL – नोड्स के लिए वैश्विक पहचानकर्ता
  • वेबहुक – अनुरोधों और प्रतिक्रियाओं को ट्रैक करना
  • टोकन – सत्र ID, रिफ्रेश टोकन

फ़ाइलें और स्टोरेज

  • फ़ाइल नाम – अपलोड करते समय टकराव को रोकना
  • S3/क्लाउड स्टोरेज – वस्तुओं के लिए अद्वितीय पथ
  • कैश कुंजी – कैश सिस्टम में पहचानकर्ता

फ्रंटएंड एप्लिकेशन

  • React/Vue कंपोनेंट्स – सूचियों के लिए अद्वितीय कुंजियाँ
  • अस्थायी ID – डेटाबेस में सहेजने से पहले ID
  • स्थानीय स्टोरेज – सहेजे गए डेटा के लिए कुंजियाँ
  • ऑफलाइन-फर्स्ट एप्लिकेशन – सर्वर से कनेक्शन के बिना ID जनरेट करना

जनरेटर की उन्नत सुविधाएँ

कस्टम समय के साथ UUID जनरेट करना

समय-आधारित संस्करणों (v1, v6, v7) के लिए आप डेट-टाइम पिकर का उपयोग करके कोई भी टाइमस्टैम्प चुन सकते हैं। यह निम्न के लिए उपयोगी है:

परीक्षण:

  • अतीत में बनाए गए UUIDs का अनुकरण करना
  • डेटाबेस में टाइम-ऑर्डरिंग का परीक्षण करना
  • डिबगिंग के लिए UUIDs को पुन: प्रस्तुत करना

डेटा माइग्रेशन:

  • ऐतिहासिक टाइमस्टैम्प के साथ UUIDs जनरेट करना
  • सही टाइमस्टैम्प मानों के साथ डेटा बैकफिल करना
  • विभिन्न समय अवधियों से डेटा आयात करना

ऑडिट और अनुपालन:

  • रिकॉर्ड निर्माण के समय के अनुसार UUIDs का पुनर्निर्माण
  • पहचानकर्ताओं का पूर्वव्यापी जनरेशन

उपयोग का उदाहरण:

  1. v1, v6 या v7 संस्करण चुनें
  2. डेट-टाइम पिकर का उपयोग करके तिथि और समय निर्धारित करें
  3. अपने स्वयं के टाइमस्टैम्प के साथ UUID जेनरेट करें

हैश-आधारित UUID (v3, v5)

नियतात्मक UUID के लिए आप v3 (MD5) या v5 (SHA-1) संस्करणों का उपयोग कर सकते हैं:

कैसे उपयोग करें:

  1. अपने पहचानकर्ता के प्रकार के अनुसार नेमस्पेस चुनें
  2. नाम/मान दर्ज करें
  3. UUID जेनरेट करें

उदाहरण:

नेमस्पेसनाम (इनपुट)उपयोग
DNSexample.comडोमेन नाम को UUID में बदलना
DNSgoogle.comप्रत्येक वेब का एक अद्वितीय UUID होता है
URLhttps://example.com/pageURL को UUID में बदलना
URLhttps://api.example.com/users/123API एंडपॉइंट को UUID के रूप में
OID1.3.6.1.4.1.343ऑब्जेक्ट आइडेंटिफ़ायर को UUID में
X.500CN=John Doe,O=Companyविशिष्ट नाम को UUID में

महत्वपूर्ण विशेषताएँ:

  • नियतात्मक: समान इनपुट = हमेशा समान UUID
  • प्रतिलिपि योग्य: आप किसी भी समय UUID को फिर से बना सकते हैं
  • सुसंगत: विभिन्न प्रणालियों में समान UUID
  • डीकोड नहीं किया जा सकता: UUID से मूल नाम वापस प्राप्त नहीं किया जा सकता है
  • ℹ️ एक UUID: v3/v5 के लिए हमेशा केवल एक UUID जनरेट होता है (समान इनपुट = समान आउटपुट)

व्यावहारिक उपयोग:

// उदाहरण: URL को UUID v5 में बदलना
Namespace: URL
नाम: https://example.com/api/users/123
परिणाम: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// समान इनपुट = हमेशा समान UUID
Namespace: DNS
नाम: google.com
परिणाम: google.com के लिए हमेशा समान UUID

UUID का सुरक्षित रूप से उपयोग कैसे करें?

क्रिप्टोग्राफिक सुरक्षा

हमारा जनरेटर crypto.getRandomValues() का उपयोग करता है, जो एक क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर है। Math.random() के विपरीत, जो अनुमान लगाने योग्य और सुरक्षा उद्देश्यों के लिए अनुपयुक्त है, crypto.getRandomValues() निम्नलिखित के लिए उपयुक्त वास्तविक एन्ट्रॉपी प्रदान करता है:

  • सुरक्षा टोकन जनरेट करना
  • सत्र ID
  • API कुंजियाँ
  • क्रिप्टोग्राफिक एप्लिकेशन

UUID संस्करणों की तुलना

संस्करणआधारटकरावसमय-क्रमबद्धताDB प्रदर्शनउपयोग
v1टाइमस्टैम्प + MACकम✅ हाँ❌ खराबलेगेसी, ऑडिट
v3MD5 हैशकोई नहीं (नियतात्मक)❌ नहीं⚠️ मध्यमरूपांतरण (लेगेसी)
v4यादृच्छिकअत्यंत कम❌ नहीं⚠️ मध्यमसामान्य उपयोग
v5SHA-1 हैशकोई नहीं (नियतात्मक)❌ नहीं⚠️ मध्यमरूपांतरण (अनुशंसित)
v6क्रमबद्ध टाइमस्टैम्पकम✅ हाँ✅ बेहतरसमय के साथ आधुनिक DB
v7यूनिक्स टाइमस्टैम्पकम✅ हाँ✅ सबसे अच्छानई परियोजनाएँ

UUID बनाम अन्य पहचानकर्ता

प्रकारआकारटकरावसमय-क्रमबद्धताउपयोग
ऑटो-इंक्रीमेंट ID4-8 बाइट्सतालिका के भीतर विशिष्टता की गारंटीसरल एप्लिकेशन, स्थानीय DB
UUID v416 बाइट्सव्यावहारिक रूप से असंभववितरित सिस्टम, API
UUID v716 बाइट्सव्यावहारिक रूप से असंभवप्रदर्शन के साथ आधुनिक DB
ULID16 बाइट्सव्यावहारिक रूप से असंभवUUID + लेक्सिकोग्राफिक क्रमबद्धता
स्नोफ्लेक ID8 बाइट्ससही कॉन्फ़िगरेशन पर विशिष्टता की गारंटीट्विटर, वितरित सिस्टम
नैनोIDकॉन्फ़िगर करने योग्यलंबाई पर निर्भर करता हैURL-अनुकूल ID

विभिन्न भाषाओं में कार्यान्वयन

JavaScript/TypeScript

// UUID v4 - सबसे सरल तरीका (आधुनिक ब्राउज़र)
const uuid = crypto.randomUUID();

// UUID v4 - मैनुअल कार्यान्वयन
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - डेटाबेस के लिए अनुशंसित
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}

Python

import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())

Java

import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();

PHP

// UUID v4 (PHP 7+)
function generateUUID() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

C#

using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();

सर्वोत्तम अभ्यास

डेटाबेस में UUID को स्टोर करना

PostgreSQL:

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

MySQL 8.0+:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

टिप: MySQL में, स्थान बचाने और तेज़ इंडेक्सिंग के लिए UUID को CHAR(36) के बजाय BINARY(16) के रूप में स्टोर करें।

UUID का सत्यापन

function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}

UUID का रूपांतरण

// डैश हटाना
const compact = uuid.replace(/-/g, '');

// डैश वापस जोड़ना
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}

समस्या निवारण

UUID v3/v5 काम नहीं कर रहा है

समस्या: v3 या v5 चुनने के बाद कुछ भी जनरेट नहीं होता है

समाधान:

  1. ✅ जाँच करें कि आपने “नाम” फ़ील्ड भरा है - यह अनिवार्य है!
  2. ✅ अपने इनपुट के प्रकार के अनुसार सही नेमस्पेस चुनें
  3. ✅ मान्य इनपुट के उदाहरण:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • कोई भी टेक्स्ट: moje-aplikace-v1

टिप: पहले test और नेमस्पेस DNS जैसा एक साधारण मान आज़माएँ।

टाइम-आधारित UUID (v1, v6, v7) में अजीब समय है

समस्या: जेनरेट किए गए UUID में अप्रत्याशित टाइमस्टैम्प है

समाधान:

  1. ✅ डेट-टाइम पिकर की जाँच करें - क्या सही समय निर्धारित किया गया है?
  2. ✅ डेट-टाइम पिकर आपके स्थानीय टाइम ज़ोन का उपयोग करता है
  3. ✅ वर्तमान समय के लिए डेट-टाइम पिकर को खाली छोड़ दें

UUID कॉपी नहीं किया जा सकता

समस्या: “सभी कॉपी करें” बटन काम नहीं कर रहा है

समाधान:

  1. ✅ जाँच करें कि आपने UUID जेनरेट किए हैं (वे खाली नहीं हैं)
  2. ✅ कुछ ब्राउज़रों को क्लिपबोर्ड API के लिए HTTPS की आवश्यकता होती है
  3. ✅ वैकल्पिक रूप से टेक्स्ट एरिया में टेक्स्ट चुनें और मैन्युअल रूप से कॉपी करें (Ctrl+C)

अक्सर पूछे जाने वाले प्रश्न (FAQ)

क्या UUID में टकराव हो सकता है? सैद्धांतिक रूप से हाँ, लेकिन इसकी संभावना खगोलीय रूप से कम है। 100 वर्षों तक प्रति सेकंड 1 बिलियन UUID v4 जनरेट करने पर, टकराव की संभावना लगभग 0.00000006% है। व्यवहार में, टकराव कभी नहीं होता है।
क्या UUID डेटाबेस में प्राथमिक कुंजी के रूप में उपयुक्त है? यह उपयोग के मामले पर निर्भर करता है। UUID वितरित सिस्टम और उन स्थितियों के लिए आदर्श है जहाँ आपको वैश्विक विशिष्टता की आवश्यकता होती है। एक डेटाबेस वाले सरल एप्लिकेशनों के लिए ऑटो-इंक्रीमेंट अधिक कुशल हो सकता है।
क्या इस उपकरण द्वारा जेनरेट किए गए UUID सुरक्षित हैं? हाँ, हम वेब क्रिप्टो API (`crypto.getRandomValues()`) का उपयोग करते हैं, जो क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक मान प्रदान करता है। सब कुछ आपके ब्राउज़र में स्थानीय रूप से होता है।
UUID संस्करणों के बीच क्या अंतर है? - **v1**: टाइमस्टैम्प + MAC/यादृच्छिक - कालानुक्रमिक क्रमबद्धता, खराब DB प्रदर्शन - **v3/v5**: हैश-आधारित - नियतात्मक, ज्ञात पहचानकर्ताओं के रूपांतरण के लिए - **v4**: यादृच्छिक - सबसे सुरक्षित, सबसे अधिक उपयोग किया जाने वाला - **v6**: पुनर्व्यवस्थित टाइमस्टैम्प - v1 की तुलना में बेहतर DB प्रदर्शन - **v7**: यूनिक्स टाइमस्टैम्प - सबसे अच्छा DB प्रदर्शन + समय-क्रमबद्धता
मुझे UUID का कौन सा संस्करण उपयोग करना चाहिए? अधिकांश मामलों के लिए **v4** (यादृच्छिक) का उपयोग करें। समय-क्रमबद्धता वाले डेटाबेस के लिए **v7** (आधुनिक) या **v6** (मानक) का उपयोग करें। ज्ञात पहचानकर्ताओं (URL, DNS) के रूपांतरण के लिए **v5** (SHA-1) का उपयोग करें।
क्या मैं टोकन और API कुंजियों के लिए UUID का उपयोग कर सकता हूँ? UUID v4 सत्र ID और इसी तरह के टोकन के लिए उपयुक्त है। API कुंजियों के लिए, लंबी यादृच्छिक स्ट्रिंग (जैसे 256-बिट मान) या विशेष पुस्तकालयों का उपयोग करने पर विचार करें।
UUID कितने बड़े होते हैं? UUID 128 बिट (16 बाइट) का होता है। डैश वाली स्ट्रिंग प्रारूप में यह 36 वर्ण लेता है। बिना डैश के 32 हेक्साडेसिमल वर्ण।

UUID के विकल्प

ULID (यूनिवर्सली यूनिक लेक्सिकोग्राफिकली सॉर्टेबल आइडेंटिफ़ायर)

  • 128-बिट ID (UUID के समान)
  • निर्माण समय के अनुसार लेक्सिकोग्राफिक रूप से क्रमबद्ध करने योग्य
  • अधिक कॉम्पैक्ट प्रतिनिधित्व (36 वर्णों के बजाय 26 वर्ण)
  • केस-इनसेंसिटिव बेस32 एन्कोडिंग

उदाहरण: 01ARZ3NDEKTSV4RRFFQ69G5FAV

NanoID

  • UUID से छोटा आकार (मानक रूप से 21 वर्ण)
  • URL-अनुकूल (विशेष वर्णों के बिना)
  • तेज़ जनरेशन
  • कॉन्फ़िगर करने योग्य लंबाई और वर्णमाला

उदाहरण: V1StGXR8_Z5jdHi6B-myT

स्नोफ्लेक ID (ट्विटर)

  • 64-बिट ID (UUID से छोटा)
  • समय-क्रमबद्ध करने योग्य
  • वर्कर ID और अनुक्रम संख्या शामिल है
  • केंद्रीकृत कॉन्फ़िगरेशन की आवश्यकता होती है

उदाहरण: 1234567890123456789

प्रदर्शन और अनुकूलन

जनरेशन गति

हमारा जनरेटर निम्नलिखित जनरेट कर सकता है:

  • 1 UUID: < 1 ms
  • 100 UUID: ~10-20 ms
  • 1000 UUID: ~100-200 ms

प्रदर्शन के लिए टिप्स

  1. बैच जनरेशन – यदि आपको कई UUID की आवश्यकता है, तो उन्हें एक-एक करके जनरेट करने के बजाय एक साथ जनरेट करें
  2. DB में स्टोर करना – तेज़ खोज के लिए UUID कॉलम को इंडेक्स करें
  3. संपीड़न – UUID को स्ट्रिंग (36 बाइट्स) के बजाय बाइनरी (16 बाइट्स) रूप में स्टोर करें
  4. कैशिंग – कुछ मामलों में आप UUID को प्री-जेनरेट और कैश कर सकते हैं

डेवलपर्स के लिए

UUID v4 की संरचना

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 बिट यादृच्छिक डेटा (नोड)
|        |    |    └────── 16 बिट यादृच्छिक डेटा वैरिएंट के साथ (घड़ी_अनुक्रम)
|        |    └─────────── 12 बिट यादृच्छिक डेटा + 4 बिट संस्करण (समय_हाई_और_संस्करण)
|        └──────────────── 16 बिट यादृच्छिक डेटा (समय_मिड)
└───────────────────────── 32 बिट यादृच्छिक डेटा (समय_लो)
  • संस्करण (4 बिट): हमेशा 0100 (बाइनरी) = 4 (हेक्स)
  • वैरिएंट (2-3 बिट): RFC 4122 के लिए हमेशा 10 (बाइनरी)

UUID का परीक्षण

// Jest test
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});

सुरक्षा पहलू

UUID के साथ क्या न करें

संवेदनशील एप्लिकेशनों के लिए UUID v1 का उपयोग न करें – इसमें टाइमस्टैम्प होता है, जो एक सुरक्षा जोखिम हो सकता है

UUID जनरेट करने के लिए Math.random() का उपयोग न करें – यह क्रिप्टोग्राफिक रूप से सुरक्षित नहीं है

प्राधिकरण के लिए UUID पर निर्भर न रहें – UUID का अनुमान लगाया जा सकता है (भले ही अत्यंत कम संभावना के साथ)

एन्क्रिप्शन के बिना कुकीज़ में UUID को स्टोर न करें – हस्ताक्षरित कुकीज़ या JWT का उपयोग करें

क्या करें

अधिकांश मामलों के लिए UUID v4 का उपयोग करें – उच्चतम एन्ट्रॉपी और सुरक्षा

अन्य सुरक्षा उपायों के साथ UUID को संयोजित करें – सत्र प्रबंधन के लिए HTTPS, HttpOnly कुकीज़, और कम समाप्ति का उपयोग करें

सर्वर पर UUID को मान्य करें – हमेशा UUID के प्रारूप और संस्करण की जाँच करें

क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिकता स्रोतों का उपयोग करें – ब्राउज़र में crypto.getRandomValues(), Linux पर /dev/urandom

रोचक तथ्य

  • संभावित UUID v4 की संख्या: 2^122 ≈ 5.3 × 10^36 (340 अनडेसिलियन)
  • आवश्यक टकराव: 50% टकराव की संभावना के लिए आपको 2.71 × 10^18 UUID (2.71 क्विंटिलियन) जनरेट करने होंगे
  • सभी संभावित UUIDs का आकार: यदि हम प्रत्येक UUID को 16 बाइट्स के रूप में स्टोर करते, तो पूरा स्थान 85 ज़ेटाबाइट्स (85 बिलियन टेराबाइट्स) लेता
  • उत्पत्ति: UUID को 1990 में DCE (डिस्ट्रीब्यूटेड कंप्यूटिंग एनवायरनमेंट) के हिस्से के रूप में मानकीकृत किया गया था