रैंडम नंबर जनरेटर
अपने ब्राउज़र के क्रिप्टोग्राफ़िक जनरेटर (crypto.getRandomValues()) का उपयोग करके किसी
भी रेंज में निष्पक्ष, बिना-पक्षपात रैंडम संख्याएँ बनाएँ — वैकल्पिक बिना-दोहराव,
दशमलव और सॉर्टिंग के साथ। कुछ भी अपलोड नहीं होता।
अंतिम समीक्षा 2026-06-19।
यादृच्छिकता कैसे काम करती है
हर संख्या crypto.getRandomValues() से बनती है, जो ब्राउज़र का
क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम स्रोत है — वही एंट्रॉपी जिसे आपका
ऑपरेटिंग सिस्टम एन्क्रिप्शन कुंजियों के लिए इस्तेमाल करता है। यह सीड नहीं किया जा सकता और न ही
इसका अनुमान लगाया या इसे दोहराया जा सकता है।
पूर्ण संख्याओं के लिए हम रिजेक्शन सैंपलिंग इस्तेमाल करते हैं: हम एक 32-बिट मान
निकालते हैं और उस छोटे “बचे हुए” क्षेत्र में गिरने वाली हर निकासी को त्याग देते हैं जो अन्यथा कुछ
संख्याओं को दूसरों से थोड़ा अधिक संभावित बना देता। परिणाम एक एकसमान वितरण है
— आपकी रेंज का हर मान बिल्कुल बराबर संभावना वाला, तब भी जब रेंज दो की घात न हो। यही वह
पक्षपात है जिसे एक भोला Math.random() × range तरीका चुपचाप ले आता है।
आम उपयोग
| उपयोग | सुझाई गई सेटिंग |
|---|---|
| गिवअवे / रैफ़ल विजेता | रेंज 1 से प्रतिभागियों की संख्या, कितनी = विजेताओं की संख्या, अद्वितीय चालू |
| पासा फेंकना | 1 से 6 (या टेबलटॉप गेम के लिए 1 से 20) |
| सिक्का उछालना | 0 से 1 (0 = हेड, 1 = टेल) |
| लॉटरी-शैली ड्रॉ | 1 से 49, कितनी = 6, अद्वितीय चालू |
| बिना प्रतिस्थापन के रैंडम सैंपल | 1 से जनसंख्या का आकार, कितनी = सैंपल का आकार, अद्वितीय चालू |
| रैंडम दशमलव (जैसे 0–1) | न्यूनतम 0, अधिकतम 1, दशमलव स्थान 2–4 |
जानने योग्य बातें
- ड्रॉ के लिए निष्पक्ष। चूँकि वितरण एकसमान और बिना-पक्षपात है, हर प्रविष्टि की समान संभावना होती है — गिवअवे, इनामी ड्रॉ और सैंपलिंग के लिए उपयुक्त।
- अद्वितीय बनाम दोहराव-सहित। अलग-अलग संख्याएँ निकालने के लिए (बिना प्रतिस्थापन सैंपलिंग) अद्वितीय चालू करें; दोहराव की अनुमति देने के लिए (स्वतंत्र निकासी) इसे बंद रखें।
- रेंज की सीमाएँ। मान −1,000,000,000 और 1,000,000,000 के बीच सीमित किए जाते हैं, और प्रति बैच अधिकतम 1,000 संख्याएँ।
- निजी। जनरेशन 100% ब्राउज़र में होता है — सर्वर को कुछ भी नहीं भेजा जाता, और यह ऑफ़लाइन काम करता है।
सच्ची यादृच्छिकता बनाम छद्म-यादृच्छिकता
कंप्यूटर नियतात्मक मशीनें हैं, इसलिए वास्तविक यादृच्छिकता उत्पन्न करना आश्चर्यजनक रूप से कठिन है। दो मौलिक रूप से भिन्न तरीके हैं। एक सच्चा रैंडम नंबर जनरेटर (TRNG) किसी अप्रत्याशित भौतिक परिघटना को मापता है — इलेक्ट्रॉनिक तापीय या शॉट नॉइज़, वायुमंडलीय रेडियो नॉइज़, रेडियोधर्मी क्षय का समय, या क्वांटम प्रभाव जैसे बीम स्प्लिटर से टकराते फ़ोटॉन — और उसे बिट में बदलता है। यादृच्छिकता प्रकृति से आती है, इसलिए आउटपुट को दोहराया या अनुमानित नहीं किया जा सकता, पर इसे बटोरना तुलनात्मक रूप से धीमा है।
एक छद्म-यादृच्छिक संख्या जनरेटर (PRNG) एक गणितीय सूत्र है जो सीड नामक एक प्रारंभिक मान से शुरू होता है और एक लंबा क्रम मथकर निकालता है जो यादृच्छिक दिखता है। यह तेज़ और सुविधाजनक है, पर पूरी तरह नियतात्मक है: जो कोई सीड और एल्गोरिद्म जानता है वह बिल्कुल वही क्रम दोबारा बना सकता है, और क्रम अंततः एक लंबाई के बाद दोहराता है जिसे उसका आवर्तकाल कहते हैं। पुनरुत्पादकता कभी-कभी एक ख़ूबी होती है — यह वैज्ञानिकों को किसी सिमुलेशन को हूबहू दोबारा चलाने देती है — पर जब अप्रत्याशितता मायने रखती है तो यह एक घातक कमज़ोरी है।
आधुनिक सिस्टम एक संकर तरीका इस्तेमाल करते हैं: एक हार्डवेयर एंट्रॉपी स्रोत एक तेज़, उच्च-गुणवत्ता वाले
छद्म-यादृच्छिक एल्गोरिद्म को सीड करता है। ठीक यही आपका ब्राउज़र करता है। इस पेज को चलाने वाली
crypto.getRandomValues() कॉल आपके ऑपरेटिंग सिस्टम के एंट्रॉपी पूल से मान लेती है, जो
लगातार हार्डवेयर नॉइज़ से भरता रहता है, इसलिए जो संख्याएँ यह बनाती है उनमें TRNG की अप्रत्याशितता और
PRNG की गति दोनों होती हैं।
छद्म-यादृच्छिक संख्याओं के पीछे के एल्गोरिद्म
सभी PRNG एक जैसे नहीं होते। दशकों के शोध ने बहुत भिन्न गुणवत्ता और गति वाले एल्गोरिद्म परिवार बनाए हैं:
| एल्गोरिद्म | वर्ष / रचयिता | टिप्पणियाँ |
|---|---|---|
| लीनियर कॉन्ग्रुएंशियल (LCG) | 1950 के दशक से | बहुत तेज़, बहुत छोटा स्टेट, पर सांख्यिकीय रूप से कमज़ोर — क्रमागत मान पहचानने योग्य अतिसमतलों (hyperplanes) पर गिरते हैं। अब भी बुनियादी rand() फ़ंक्शनों में आम। |
| मर्सेन ट्विस्टर | 1997, मात्सुमोतो और निशिमुरा | 219937−1 का विशाल आवर्तकाल और अच्छी सांख्यिकीय गुणवत्ता; Python, R और कई भाषाओं का डिफ़ॉल्ट — पर क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं। |
| Xorshift | 2003, जॉर्ज मार्साग्लिया | अत्यंत तेज़ बिट-शिफ़्टिंग जनरेटर; किसी ग़ैर-रैखिक चरण के साथ जोड़े जाने पर कड़े परीक्षण पास करते हैं। |
| PCG | 2014, मेलिसा ओ'नील | एक परम्यूटेड कॉन्ग्रुएंशियल परिवार जो एक तेज़ LCG कोर को आउटपुट स्क्रैम्बल के साथ जोड़ता है — छोटा, तेज़ और सांख्यिकीय रूप से बेहतरीन। |
एक आम ग़लतफ़हमी यह है कि मर्सेन ट्विस्टर, अपने खगोलीय आवर्तकाल और मज़बूत परीक्षण परिणामों के कारण, सुरक्षा के लिए सुरक्षित होना चाहिए। ऐसा नहीं है: केवल इसके 624 आउटपुट देखकर, एक हमलावर इसका आंतरिक स्टेट पुनर्प्राप्त कर सकता है और हर भावी मान का अनुमान लगा सकता है। सांख्यिकीय गुणवत्ता और क्रिप्टोग्राफ़िक सुरक्षा अलग-अलग आवश्यकताएँ हैं, और यही वह भेद है जिसके इर्द-गिर्द यह टूल बना है।
किसी जनरेटर को "क्रिप्टोग्राफ़िक रूप से सुरक्षित" क्या बनाता है
एक क्रिप्टोग्राफ़िक रूप से सुरक्षित PRNG (CSPRNG) को केवल सांख्यिकीय परीक्षण पास करने
से कहीं कड़ा मानक पूरा करना पड़ता है। दो गुण इसे परिभाषित करते हैं। अगले-बिट परीक्षण
(next-bit test): अब तक के हर आउटपुट बिट को देखते हुए, कोई भी कुशल एल्गोरिद्म अगले बिट का अनुमान
सिक्के-उछाल की संभावना से बेहतर नहीं लगा सकता। और स्टेट-कॉम्प्रोमाइज़ प्रतिरोध: भले
ही इसका आंतरिक स्टेट किसी तरह उजागर हो जाए, हमलावर फिर भी उन रैंडम संख्याओं को पुनर्निर्मित नहीं कर
सकता जो यह पहले बना चुका है। JavaScript के Math.random() जैसा ग़ैर-क्रिप्टोग्राफ़िक
जनरेटर दोनों में विफल रहता है — यह गेम और एनिमेशन में गति के लिए बना है, इसका स्टेट इसके आउटपुट
से पुनर्प्राप्त किया जा सकता है, और विनिर्देश तो यादृच्छिकता की किसी विशेष गुणवत्ता की गारंटी भी नहीं
देता।
अमेरिका का राष्ट्रीय मानक एवं प्रौद्योगिकी संस्थान (NIST) स्वीकृत डिज़ाइनों के लिए मानक प्रकाशित करता
है, NIST SP 800-90A, जो जाँचे-परखे नियतात्मक रैंडम-बिट जनरेटर निर्दिष्ट करता है। इस
क्षेत्र में एक प्रसिद्ध चेतावनी-कथा भी है: उस मानक के पुराने संस्करण का एक एल्गोरिद्म,
Dual_EC_DRBG, बाद में एक संभावित बैकडोर रखने वाला दिखा और वापस ले लिया गया —
यह याद दिलाता है कि किसी जनरेटर का डिज़ाइन, केवल उसका आउटपुट नहीं, तय करता है कि उस पर भरोसा किया जा
सकता है या नहीं। यहाँ इस्तेमाल किया गया crypto.getRandomValues() स्रोत ऑपरेटिंग सिस्टम
के जाँचे-परखे CSPRNG तक ब्राउज़र का इंटरफ़ेस है।
एक निष्पक्ष रेंज दिखने से कठिन क्यों है
मान लीजिए आप 1 से 6 तक एक निष्पक्ष संख्या चाहते हैं और आपके पास एक जनरेटर है जो एक रैंडम बाइट
(0–255) लौटाता है। आलसी तरीका है शेषफल लेना: byte % 6 + 1। पर 256, 6 का गुणज नहीं
है। मान 0–251 छह बाल्टियों में 42-42 के हिसाब से समान रूप से बँटते हैं, पर बचे हुए चार मान
252–255, 1, 2, 3 और 4 की बाल्टियों में गिरते हैं — इसलिए वे चार परिणाम 5 और 6 की तुलना
में थोड़ा अधिक बार आते हैं। यह मॉड्यूलो पक्षपात है, और यद्यपि पासे के लिए यह झुकाव
नन्हा है, यह रेंज के साथ बढ़ता है और क्रिप्टोग्राफ़िक कुंजियों, बड़ी लॉटरियों या वैज्ञानिक सैंपलिंग के
लिए मायने रख सकता है।
हल है रिजेक्शन सैंपलिंग: अपनी रेंज का वह सबसे बड़ा गुणज परिभाषित करें जो जनरेटर के आउटपुट में समाता है (यहाँ, 252), और बस उस मान को त्याग दें — अस्वीकार करके दोबारा निकालें — जो उससे या उसके ऊपर पड़ता है। बचने वाला हर मान ठीक एक परिणाम से जुड़ता है, इसलिए हर परिणाम बिल्कुल बराबर संभावना वाला होता है। यह जनरेटर हर पूर्णांक के लिए एक पूरे 32-बिट ड्रॉ पर यह तकनीक लगाता है, यही वजह है कि इसकी रेंज गणितीय रूप से "क़रीब-क़रीब" के बजाय एकसमान होती है।
लोग रैंडम होने में क्यों ख़राब हैं
"मन में एक संख्या सोच लें" कहना लुभावना है, पर इंसान बेहद ख़राब रैंडम जनरेटर होते हैं, और ठीक इसीलिए इस जैसा टूल मौजूद है। जब 1 से 10 तक एक अंक चुनने को कहा जाए, तो बाक़ी किसी अंक की तुलना में कहीं अधिक लोग 7 चुनते हैं — यह सबसे "रैंडम" लगता है क्योंकि यह विषम है, अभाज्य है और गोल छोरों से दूर बैठता है। लोग एक ही मान को लगातार दो बार दोहराने से भी अनजाने में बचते हैं और ऊँचे-नीचे विकल्पों को बदल-बदल कर चुनते हैं, क्योंकि दोहरावों की एक असली लड़ी ग़ैर-रैंडम लगती है, भले ही सच्ची यादृच्छिकता ऐसी लड़ियाँ हर वक़्त बनाती हो। यही प्रवृत्ति जुआरी की भ्रांति को हवा देती है: यह ग़लत विश्वास कि कई हेड के बाद अब एक टेल "बकाया" है। हर स्वतंत्र निकासी की कोई स्मृति नहीं होती, इसलिए एक निष्पक्ष जनरेटर ख़ुशी-ख़ुशी ऐसे झुंड और लड़ियाँ बनाएगा जिन्हें अपने अनुमान से संपादन करता कोई व्यक्ति कभी नहीं लिखता। यदि आपको एक ऐसा परिणाम चाहिए जो बचाव-योग्य रूप से निष्पक्ष हो — किसी गिवअवे, सैंपलिंग निर्णय या टाई-ब्रेक के लिए — तो एक एकसमान मशीन निकासी उस छिपे हुए मानवीय पक्षपात को पूरी तरह हटा देती है।
यादृच्छिकता की जाँच कैसे होती है
आप किसी परिमित क्रम को रैंडम सिद्ध नहीं कर सकते, पर आप किसी जनरेटर को सांख्यिकीय परीक्षणों की शृंखलाओं के अधीन कर सकते हैं जो उन पैटर्नों को पकड़ने की कोशिश करते हैं जो किसी सच्चे रैंडम स्रोत में नहीं होते। क्लासिक सुइट जॉर्ज मार्साग्लिया के Diehard परीक्षण हैं (बाद में Dieharder के रूप में विस्तारित); सबसे कठिन आधुनिक शृंखला पिएर लेक्यूयर का TestU01 है, जिसका "BigCrush" सेट सौ से अधिक परीक्षण चलाता है। NIST क्रिप्टोग्राफ़ी के लिए इस्तेमाल होने वाले जनरेटरों को ख़ास तौर पर लक्षित करने वाला अपना सांख्यिकीय परीक्षण सुइट प्रकाशित करता है। इनमें से कई के नीचे विनम्र काई-वर्ग परीक्षण बैठा है, जो जाँचता है कि क्या देखी गई आवृत्तियाँ (हर मान कितनी बार आता है) उस एकसमान वितरण से मेल खाती हैं जिसकी आप संयोग से अपेक्षा करते हैं। ये परीक्षण पास करना आवश्यक है पर, जैसा ऊपर बताया गया, क्रिप्टोग्राफ़िक उपयोग के लिए पर्याप्त नहीं।
असल दुनिया में रैंडम संख्याएँ
रैंडम संख्या जनरेशन चुपचाप गतिविधियों की एक विशाल शृंखला को आधार देता है:
- क्रिप्टोग्राफ़ी। एन्क्रिप्शन कुंजियाँ, सेशन टोकन, नॉन्स, सॉल्ट और डिजिटल हस्ताक्षर सभी ऐसी संख्याओं पर निर्भर हैं जिनका हमलावर अनुमान न लगा सके। यहाँ एक कमज़ोर जनरेटर विनाशकारी है — अनुमेय कुंजियाँ सीधे तोड़ी जा सकती हैं।
- मोंटे कार्लो सिमुलेशन। भौतिकी, वित्त, मौसम और इंजीनियरिंग मॉडल उन परिणामों का अनुमान लगाने के लिए लाखों रैंडम आज़माइशें चलाते हैं जिन्हें सीधे हल करना बहुत जटिल है, जैसे ऑप्शन प्राइसिंग या कणों का व्यवहार।
- गेम और प्रक्रियात्मक जनरेशन। पासे के फेंक, कार्ड फेंटना, लूट-ड्रॉप और पूरे-के-पूरे बनाए गए संसार ताज़ा और निष्पक्ष बने रहने के लिए यादृच्छिकता पर निर्भर हैं।
- सांख्यिकीय सैंपलिंग। किसी जनसंख्या से एक रैंडम, प्रतिनिधि सैंपल निकालना — सर्वेक्षण, ऑडिट या A/B परीक्षण के लिए — इस पर निर्भर है कि हर सदस्य के चुने जाने की समान संभावना हो।
- लॉटरी और इनामी ड्रॉ। निष्पक्षता और सार्वजनिक भरोसे के लिए एक बिना-पक्षपात, छेड़छाड़-रोधी ड्रॉ चाहिए, ठीक वही गुण जो रिजेक्शन सैंपलिंग सुनिश्चित करती है।
अक्सर पूछे जाने वाले सवाल
- क्या यह रैंडम नंबर जनरेटर सच में रैंडम है?
- यह आपके ब्राउज़र के crypto.getRandomValues() API का उपयोग करता है, जो ऑपरेटिंग सिस्टम के क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म-यादृच्छिक संख्या जनरेटर (CSPRNG) से मान लेता है — वही एंट्रॉपी स्रोत जिसे पासवर्ड मैनेजर और TLS इस्तेमाल करते हैं। Math.random() के विपरीत, यह अप्रत्याशित है और सीड नहीं किया जा सकता, इसलिए परिणाम न दोहराए जा सकते हैं और न ही अनुमान लगाया जा सकता है। पूर्णांकों के लिए हम रिजेक्शन सैंपलिंग भी लगाते हैं ताकि आपकी रेंज का हर मान बिल्कुल बराबर संभावना वाला हो (कोई मॉड्यूलो पक्षपात नहीं)।
- क्या मैं इसे किसी गिवअवे या रैफ़ल के लिए निष्पक्ष रूप से उपयोग कर सकता हूँ?
- हाँ। हर प्रतिभागी को एक संख्या दें (1 से N), रेंज को 1–N पर सेट करें, यदि आप कई विजेता निकाल रहे हैं तो “अद्वितीय (बिना दोहराव)” चालू करें, और जनरेट करें। चूँकि रेंज का हर मान बराबर संभावना वाला है और ड्रॉ निष्पक्ष है, यह एक निष्पक्ष चयन है। पूरी पारदर्शिता के लिए आप ड्रॉ को स्क्रीन-रिकॉर्ड कर सकते हैं या प्रतिभागियों के सामने जनरेट कर सकते हैं — सर्वर को कुछ भी नहीं भेजा जाता, इसलिए परिणाम आपके डिवाइस पर लाइव बनता है।
- “अद्वितीय (बिना दोहराव)” क्या करता है?
- इसके बंद रहने पर, हर संख्या स्वतंत्र रूप से निकाली जाती है, इसलिए वही मान एक से अधिक बार आ सकता है (जैसे बार-बार पासा फेंकना)। इसके चालू रहने पर, आउटपुट की हर संख्या अलग होती है — लॉटरी ड्रॉ, अलग-अलग विजेता चुनने, या बिना प्रतिस्थापन के सैंपलिंग के लिए उपयोगी। यदि आप रेंज में समा सकने से अधिक अद्वितीय संख्याएँ माँगते हैं (जैसे 1 और 5 के बीच 10 अद्वितीय संख्याएँ), तो गिनती अपने आप रेंज के आकार तक सीमित कर दी जाती है।
- यह Math.random() से कैसे अलग है?
- Math.random() एक तेज़, ग़ैर-क्रिप्टोग्राफ़िक जनरेटर है जो एनिमेशन या ग़ैर-ज़रूरी सूचियों को फेंटने जैसे कामों के लिए बना है; इसका आउटपुट अप्रत्याशित होने की गारंटी नहीं देता और मॉड्यूलो ऑपरेटर से किसी रेंज पर स्केल करने पर पक्षपाती हो सकता है। crypto.getRandomValues() क्रिप्टोग्राफ़िक रूप से सुरक्षित है, और हमारा रिजेक्शन-सैंपलिंग चरण मॉड्यूलो पक्षपात को पूरी तरह हटा देता है, इसलिए दो की घात न होने वाली रेंज के लिए भी हर मान बिल्कुल बराबर संभावना वाला रहता है।
- क्या यह दशमलव संख्याएँ बना सकता है?
- हाँ। “दशमलव स्थान” को 1–4 पर सेट करें और जनरेटर आपकी रेंज में एकसमान दशमलव मान लौटाता है (उदाहरण के लिए 0 और 1 के बीच 4 दशमलव वाली एक रैंडम संख्या)। 0 दशमलव स्थान पर यह बिना-पक्षपात पूर्णांक पथ का उपयोग करके पूर्ण संख्याएँ लौटाता है।
- क्या कुछ भी मेरे ब्राउज़र से बाहर जाता है?
- नहीं। हर संख्या आपके डिवाइस के CPU और OS एंट्रॉपी का उपयोग करके स्थानीय रूप से बनती है। कुछ भी अपलोड, प्रेषित या लॉग नहीं किया जाता, और लोड हो जाने के बाद पेज ऑफ़लाइन भी काम करता रहता है।