यादृच्छिक संख्या जनरेटर

किसी भी सीमा में एक यादृच्छिक संख्या, सूची, या संख्याओं के कई सेट जनरेट करें — सब कुछ सीधे आपके ब्राउज़र में क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिकता से बनता है, कभी सर्वर पर नहीं।

चुनने के लिए जनरेट दबाएं
विकल्प

जल्दी और निष्पक्ष तरीक़े से एक यादृच्छिक संख्या चाहिए? यह मुफ़्त ऑनलाइन यादृच्छिक संख्या जनरेटर आपके चुने हुए किसी भी सीमा में एक संख्या — या संख्याओं की पूरी सूची — बना देता है, चाहे वह 1 से 10 जैसी आसान सीमा हो या अरबों तक फैली हुई सीमा। 'न्यूनतम' और 'अधिकतम' बॉक्स में सबसे छोटी और सबसे बड़ी वैल्यू डालें, 'चयन की संख्या' में तय करें कि कितनी संख्याएँ चाहिए, और 'जनरेट करें' पर क्लिक करें। दोनों सीमाएँ नतीजे में शामिल होती हैं, इसलिए 1 से 10 की सीमा 1 और 10 — दोनों दे सकती है।

हर नतीजा सीधे आपके ब्राउज़र में Web Crypto API (crypto.getRandomValues) के ज़रिए बनता है — यह आपके ब्राउज़र की अंतर्निहित सिस्टम यादृच्छिकता से क्रिप्टोग्राफ़िक रूप से मज़बूत वैल्यूज़ देता है। कुछ भी सर्वर पर नहीं भेजा जाता, कुछ भी सेव नहीं किया जाता, और हम आपकी संख्याएँ कभी नहीं देखते। नतीजे तुरंत बनते हैं और निजी ही रहते हैं, और पेज लोड होने के बाद धीमे कनेक्शन पर भी काम करता रहता है।

ये विकल्प उन असली स्थितियों के लिए बनाए गए हैं, जहाँ लोगों को सचमुच यादृच्छिक संख्याओं की ज़रूरत होती है। किसी संख्या को दो बार आने से रोकने के लिए 'दोहराव न होने दें' चालू करें — यह वह व्यवस्था है, जो आपको ड्रॉ, लॉटरी जैसे ड्रॉ, या लोगों को बिना दोहराव के समूहों में बाँटने के लिए चाहिए। 500 प्रतिभागियों में से बीस विजेता चाहिए? 'न्यूनतम' को 1 और 'अधिकतम' को 500 पर रखें, 'दोहराव न होने दें' चालू करें, 'चयन की संख्या' को 20 पर रखें, और 'जनरेट करें' पर क्लिक करें। 'क्रम' नतीजे को आरोही या अवरोही क्रम में सजाता है, और एक बटन से सभी नतीजे कॉपी हो जाते हैं। 'आउटपुट प्रारूप' को 'नई पंक्ति' से 'स्पेस से अलग किया गया' या 'अल्पविराम से अलग किया गया' में बदलने पर 'सेटों की संख्या' वाला बॉक्स दिखता है: एक साथ कई स्वतंत्र ड्रॉ — जैसे बीस ड्रॉ राउंड के लिए हर एक में 3 संख्याओं वाले बीस सेट — और 'सेटों के बीच दोहराव की अनुमति दें' तय करता है कि एक ही संख्या इनमें से एक से ज़्यादा में आ सकती है या नहीं।

यादृच्छिकता असल में कैसे जनरेट होती है? आपका ब्राउज़र Math.random() जैसे किसी JavaScript PRNG के बजाय Web Crypto API के ज़रिए क्रिप्टोग्राफ़िक रूप से मज़बूत यादृच्छिक वैल्यूज़ देता है। 'जनरेट करें' पर क्लिक करने पर, पेज crypto.getRandomValues के ज़रिए यादृच्छिक वैल्यूज़ माँगता है और उनसे आपकी चुनी हुई सीमा में संख्याएँ बनाता है। यादृच्छिकता का मूल स्रोत ब्राउज़र और ऑपरेटिंग सिस्टम से मिलता है, इसलिए पेज को अपनी कोई शुरुआती वैल्यू (seed) या स्यूडो-यादृच्छिक क्रम बनाए रखने की ज़रूरत नहीं होती।

किसी कच्ची वैल्यू को आपकी सीमा में ढालना ही वह जगह है, जहाँ जनरेटर चुपचाप ग़लती कर बैठते हैं, और यह अपने आप में एक अलग पैराग्राफ़ का हक़दार है। वैल्यू को सीमा के आकार से भाग देकर जो शेष बचता है उसे लेना सबसे आसान तरीक़ा लगता है, लेकिन यह पक्षपाती है: अगर सीमा ठीक-ठीक 2^32 से विभाज्य न हो, तो सबसे छोटी संख्याएँ बाक़ी की तुलना में थोड़ी ज़्यादा बार आती हैं। इस खामी को modulo bias कहा जाता है, और यह महज़ सैद्धांतिक नहीं, नापी जा सकने वाली है। यह जनरेटर इसके बजाय सीमा के सबसे बड़े सटीक गुणज से आगे की किसी भी वैल्यू को छोड़ देता है और दोबारा जनरेट करता है — इस तकनीक को rejection sampling कहते हैं। इसमें कुछ अतिरिक्त कोशिशें लगती हैं, लेकिन बदले में पूरी गारंटी मिलती है: 'न्यूनतम' और 'अधिकतम' के बीच हर संख्या की संभावना बिल्कुल बराबर होती है, लगभग बराबर नहीं।

किसी संख्या को सचमुच यादृच्छिक क्या बनाता है? कोई संख्या तब पर्याप्त रूप से यादृच्छिक होती है, जब पिछले नतीजे अगले के बारे में कुछ भी नहीं बताते — और असल में इसके तीन स्तर होते हैं। Math.random() जैसा एक साधारण स्यूडो-यादृच्छिक फ़ंक्शन एक निश्चित (deterministic) एल्गोरिद्म चलाता है: इसकी आंतरिक स्थिति जानने वाला कोई भी व्यक्ति पूरा क्रम फिर से बना सकता है, जो इसे किसी स्लाइडशो को फेरबदल करने के लिए तो ठीक बनाता है, लेकिन ऐसी किसी भी चीज़ के लिए अनुपयुक्त, जहाँ नतीजा अनुमानित नहीं होना चाहिए। इस टूल में इस्तेमाल होने वाला CSPRNG भी एक एल्गोरिद्म ही है, लेकिन यह सिस्टम की यादृच्छिकता के सुरक्षित स्रोत का इस्तेमाल करके अप्रत्याशित वैल्यूज़ बनाने के लिए डिज़ाइन किया गया है, और इस तरह बनाया गया है कि इसके आउटपुट को देखकर भी अगली वैल्यू के बारे में कुछ पता नहीं चलता। वायुमंडलीय शोर या रेडियोधर्मी क्षय जैसे स्रोतों से मिलने वाली प्राकृतिक यादृच्छिकता इन दोनों स्तरों से भी ऊपर होती है, हालाँकि किसी सीमा से संख्या जनरेट करने की बात हो तो व्यावहारिक फ़र्क़ मिट जाता है। ठीक इसी वजह से ब्राउज़र सिर्फ़ Math.random() को बेहतर बनाने के बजाय एक अलग क्रिप्टो API देते हैं: ये दोनों अलग-अलग समस्याएँ हल करते हैं, और जब नतीजा किसी के लिए मायने रखता है, तो इनमें से सिर्फ़ एक ही सुरक्षित है।

किसी यादृच्छिक क्रम का लोगों को यादृच्छिक दिखना ज़रूरी नहीं है। 1 और 10 के बीच दस संख्याएँ जनरेट करें, और आपको अक्सर एक दोहराव, 7, 7, 8 जैसा लगभग-जोड़ा, या ऐसा छोटा क्रम दिखेगा जहाँ सभी संख्याएँ बड़ी हों — और इनमें से हर एक बिल्कुल सामान्य है। असली यादृच्छिकता अप्रत्याशित होती है, बराबर-बराबर फैली हुई नहीं: हर संख्या पिछली संख्याओं से स्वतंत्र होकर आती है, पिछली संख्याओं का अगली संख्याओं पर बिल्कुल भी असर नहीं होता, और किसी भी संख्या के दूसरी संख्या की तुलना में ज़्यादा बार आने की संभावना नहीं होती। इसके उलट मानने की यह प्रवृत्ति जुआरी की भ्रांति है, और यही वजह है कि इंसान ख़ुद यादृच्छिक संख्याएँ बनाने में अच्छे नहीं होते — जब हमसे ख़ुद एक यादृच्छिक क्रम सोचने को कहा जाता है, तो हम दोहराव से बचते हैं और वैल्यूज़ को उससे कहीं ज़्यादा बराबर बाँट देते हैं, जितना यादृच्छिकता कभी करती। कोई नतीजा जो ज़रूरत से ज़्यादा सुव्यवस्थित दिखे, वह इंसान की छाप है; असली यादृच्छिकता गुच्छे बनाती है।

यह यादृच्छिक संख्या जनरेटर ही क्यों चुनें?

यादृच्छिक संख्याएँ ज़्यादातर लोगों की सोच से कहीं ज़्यादा जगहों पर इस्तेमाल होती हैं। शिक्षक बिना किसी को तरजीह दिए छात्रों को बुलाते हैं। स्ट्रीमर और मार्केटिंग टीमें उस दर्शक वर्ग के सामने गिफ़्ट और ड्रॉ के विजेता तय करती हैं, जिन्हें नतीजे पर भरोसा करना होता है। खिलाड़ी खोए हुए पासे की जगह इसका इस्तेमाल करते हैं या तय करते हैं कि पहले कौन शुरू करेगा, और टूर्नामेंट में शुरुआती क्रम ड्रॉ से तय होता है। शोधकर्ता एक यादृच्छिक नमूना चुनते हैं, ताकि उनके निष्कर्ष उन लोगों पर भी लागू हों जिन्होंने शोध में हिस्सा नहीं लिया। डेवलपर टेस्ट डेटा जनरेट करते हैं, सिमुलेशन के लिए एक शुरुआती वैल्यू (seed) तय करते हैं, और QA के दौरान आइडेंटिफ़ायर चुनते हैं। इन सबमें साझा बात है एक यादृच्छिक चुनाव प्रक्रिया, जिसे बाद में समझाया जा सकता है: क्योंकि यह ड्रॉ क्रिप्टोग्राफ़िक यादृच्छिकता का इस्तेमाल करता है और पूरी तरह आपके डिवाइस पर होता है, इसलिए अगर कोई सवाल उठाए, तो आप दिखा सकते हैं कि नतीजा कैसे बना।

इस जनरेटर की कुछ ईमानदार सीमाएँ हैं, जिन्हें जानना ज़रूरी है। 'दोहराव न होने दें' मोड सीमा में मौजूद संख्याओं से ज़्यादा संख्याएँ जनरेट नहीं कर सकता: 1 और 10 के बीच बीस यूनीक वैल्यूज़ असल में मौजूद ही नहीं हैं। ड्रॉ स्वतंत्र होते हैं, और पिछले नतीजे अगले नतीजों को प्रभावित नहीं करते, इसलिए पेज रीफ़्रेश करने से कोई चक्र दोबारा शुरू नहीं होता — क्योंकि ऐसा कोई चक्र है ही नहीं, जिसमें आप हों। और भले ही संख्याएँ क्रिप्टोग्राफ़िक रूप से मज़बूत हों, यहाँ का ड्रॉ कोई भविष्यवाणी नहीं, बल्कि एक निष्पक्ष चुनाव है: आधिकारिक लॉटरी ड्रॉ अपने ख़ुद के भौतिक या प्रमाणित उपकरण इस्तेमाल करते हैं, और आपके ब्राउज़र में हुई किसी भी गणना का उनसे कोई संबंध नहीं है। इन सीमाओं के भीतर गारंटी मज़बूत बनी रहती है: आपकी सीमा में हर संख्या को हर अलग ड्रॉ में बिल्कुल बराबर मौक़ा मिलता है।

FAQ

क्या यादृच्छिकता क्रिप्टोग्राफ़िक रूप से सुरक्षित है?

आपके ब्राउज़र के Web Crypto API (crypto.getRandomValues) का इस्तेमाल किया जाता है, जो आपके ऑपरेटिंग सिस्टम के क्रिप्टोग्राफ़िक रूप से सुरक्षित स्रोत से यादृच्छिकता लेता है। साधारण स्यूडो-यादृच्छिक फ़ंक्शंस से अलग, इसका आउटपुट व्यवहार में अप्रत्याशित होने के लिए डिज़ाइन किया गया है, और rejection sampling सबसे छोटी वैल्यूज़ को तरजीह देने के बजाय सीमा की हर संख्या के लिए बराबर संभावना बनाए रखता है।

किसी तय सीमा में यादृच्छिक संख्या कैसे जनरेट करूँ?

सबसे छोटी संभव वैल्यू 'न्यूनतम' बॉक्स में और सबसे बड़ी 'अधिकतम' बॉक्स में डालें, फिर 'जनरेट करें' पर क्लिक करें। दोनों छोर नतीजे में शामिल होते हैं, इसलिए 1 से 10 की सीमा 1 और 10 दोनों बना सकती है।

क्या मैं एक साथ कई यादृच्छिक संख्याएँ जनरेट कर सकता हूँ?

हाँ। 'चयन की संख्या' को अपनी ज़रूरत के हिसाब से रखें (1000 तक), और जनरेटर एक ही क्लिक में पूरी सूची बना देगा। इसके बाद आप कॉपी बटन से सभी नतीजे क्लिपबोर्ड में कॉपी कर सकते हैं, या उन्हें किसी फ़ाइल में सेव कर सकते हैं।

क्या मैं एक साथ संख्याओं के कई सेट जनरेट कर सकता हूँ?

हाँ। 'आउटपुट प्रारूप' को 'नई पंक्ति' से 'स्पेस से अलग किया गया' या 'अल्पविराम से अलग किया गया' में बदलें, ताकि 'सेटों की संख्या' वाला बॉक्स दिखे। इसे अपनी ज़रूरत के स्वतंत्र ड्रॉ की संख्या पर रखें — जैसे बीस ड्रॉ राउंड के लिए हर एक में 3 संख्याओं वाले बीस सेट — और तय करें कि अलग-अलग सेटों में दोहराव हो सकता है या नहीं।

क्या मैं जनरेट हुई संख्याओं को क्रमबद्ध कर सकता हूँ?

हाँ। हर सूची को आरोही या अवरोही क्रम में सजाने के लिए 'क्रम' विकल्प इस्तेमाल करें, या संख्याओं को उसी क्रम में रखने के लिए इसे 'कोई नहीं' पर छोड़ दें, जिस क्रम में वे जनरेट हुई थीं।

दोहराई गई संख्याओं से कैसे बचें?

'दोहराव न होने दें' स्विच चालू करें। यह चालू होने पर, सूची की हर जनरेट हुई संख्या अलग होती है — यह ड्रॉ, इनाम के ड्रॉ, या लोगों को समूहों में बाँटने के लिए एकदम सही है। ध्यान रखें कि 'चयन की संख्या' सीमा के आकार से ज़्यादा नहीं हो सकती: आप 1 और 10 के बीच 20 यूनीक संख्याएँ जनरेट नहीं कर सकते।

एक ही संख्या बार-बार क्यों आती रहती है?

क्योंकि स्वतंत्र ड्रॉ दोहराए जा सकते हैं, और यादृच्छिकता दिखती ही ऐसी है। हर ड्रॉ अपने पहले के सभी ड्रॉ को पूरी तरह नज़रअंदाज़ करता है, इसलिए 1 से 10 की सीमा में एक ही संख्या के लगातार दो बार आने की संभावना हर बार 10 में से 1 होती है — यह सामान्य है, ख़राबी नहीं। अगर आपको दोहराव-रहित सूची चाहिए, तो 'दोहराव न होने दें' चालू करें; यह किसी ख़राबी को ठीक नहीं करता, बल्कि जान-बूझकर ड्रॉ को सीमित करता है।

एक यादृच्छिक क्रम यादृच्छिक क्यों नहीं दिखता?

क्योंकि असली यादृच्छिकता अप्रत्याशित होती है, बराबर बँटी हुई नहीं। लोग उम्मीद करते हैं कि एक यादृच्छिक नतीजा सुव्यवस्थित तरीक़े से फैला होगा, इसलिए गुच्छे, दोहराव, और 7, 7, 8 जैसे छोटे क्रम ग़लती जैसे लगते हैं, हालाँकि यही असल में यादृच्छिकता बनाती है। कोई क्रम जो किसी इंसान को सुव्यवस्थित लगे, आमतौर पर यादृच्छिक नहीं होता।

क्या मैं ब्राउज़र में जनरेट हुई यादृच्छिकता पर भरोसा कर सकता हूँ?

हाँ, जब यह Web Crypto API से आती है, जैसा यहाँ होता है। crypto.getRandomValues ब्राउज़र की अंतर्निहित सिस्टम यादृच्छिकता का इस्तेमाल करके क्रिप्टोग्राफ़िक रूप से मज़बूत यादृच्छिक वैल्यूज़ देता है, न कि Math.random() जैसे किसी JavaScript PRNG से। किसी भी सचमुच अहम चीज़ के लिए जिस पर भरोसा नहीं करना चाहिए, वह है Math.random(): यह निश्चित (deterministic) है, और कभी अप्रत्याशित होने के लिए डिज़ाइन नहीं किया गया।

क्या यादृच्छिक संख्याओं का अनुमान लगाया जा सकता है या उन्हें प्रभावित किया जा सकता है?

यहाँ नहीं। वैल्यूज़ आपके ऑपरेटिंग सिस्टम के क्रिप्टोग्राफ़िक रूप से सुरक्षित जनरेटर से आती हैं, इसलिए पिछले नतीजे देखने से भी अगले के बारे में कुछ पता नहीं चलता, और ड्रॉ पूरी तरह आपके डिवाइस पर होता है — न तो कोई सर्वर है जिसमें छेड़छाड़ की जा सके, और न ही कोई रिक्वेस्ट है जिसे बीच में पकड़ा जा सके। हम भी आपके नतीजों को प्रभावित नहीं कर सकते, क्योंकि हम उन्हें कभी देखते ही नहीं।

क्या यह गिफ़्ट या ड्रॉ के विजेता चुनने के लिए सही है?

हाँ। हर प्रतिभागी को एक संख्या दें, उस सीमा में एक नतीजा जनरेट करें, और जिस प्रतिभागी की संख्या मेल खाए वह जीत जाता है। क्योंकि स्रोत क्रिप्टोग्राफ़िक रूप से सुरक्षित है और ड्रॉ पूरी तरह आपके डिवाइस पर होता है, इसलिए अगर कोई प्रतिभागी नतीजे पर सवाल उठाए, तो प्रक्रिया समझाना और साबित करना आसान है। अगर आप लॉटरी टिकट के लिए संख्याएँ चुन रहे हैं, तो यह टूल एक यादृच्छिक चुनाव के साधन की तरह काम करता है, किसी भविष्यवाणी की तरह नहीं: आधिकारिक लॉटरी ड्रॉ का इससे कोई संबंध नहीं होता।

क्या पेज रीफ़्रेश करने से यादृच्छिकता बदल जाती है?

नहीं, और इसकी ज़रूरत भी नहीं है। हर ड्रॉ पहले से ही ऑपरेटिंग सिस्टम से नई यादृच्छिक वैल्यूज़ माँगता है, इसलिए नतीजे स्वतंत्र ही रहते हैं, चाहे आप 'जनरेट करें' पर लगातार दस बार क्लिक करें या हर क्लिक के बीच पेज रीलोड करें। न तो कोई चक्र है जिसे दोबारा शुरू करना पड़े, और न ही कोई स्थिति है जो पुरानी पड़ जाए — रीफ़्रेश करने से बस स्क्रीन पर दिखाए गए नतीजे मिट जाते हैं।

क्या यह जनरेटर मुफ़्त है, और क्या आप मेरी संख्याएँ सेव करते हैं?

यह टूल पूरी तरह मुफ़्त है और इसके लिए साइन-अप की ज़रूरत नहीं है। सभी संख्याएँ आपके ब्राउज़र में ही स्थानीय रूप से जनरेट होती हैं और आपके डिवाइस को कभी नहीं छोड़तीं, इसलिए चाहकर भी हम आपके नतीजे सेव या नहीं देख सकते।