जल्दी और निष्पक्ष तरीक़े से एक यादृच्छिक संख्या चाहिए? यह मुफ़्त ऑनलाइन यादृच्छिक संख्या जनरेटर आपके चुने हुए किसी भी सीमा में एक संख्या — या संख्याओं की पूरी सूची — बना देता है, चाहे वह 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 जैसा लगभग-जोड़ा, या ऐसा छोटा क्रम दिखेगा जहाँ सभी संख्याएँ बड़ी हों — और इनमें से हर एक बिल्कुल सामान्य है। असली यादृच्छिकता अप्रत्याशित होती है, बराबर-बराबर फैली हुई नहीं: हर संख्या पिछली संख्याओं से स्वतंत्र होकर आती है, पिछली संख्याओं का अगली संख्याओं पर बिल्कुल भी असर नहीं होता, और किसी भी संख्या के दूसरी संख्या की तुलना में ज़्यादा बार आने की संभावना नहीं होती। इसके उलट मानने की यह प्रवृत्ति जुआरी की भ्रांति है, और यही वजह है कि इंसान ख़ुद यादृच्छिक संख्याएँ बनाने में अच्छे नहीं होते — जब हमसे ख़ुद एक यादृच्छिक क्रम सोचने को कहा जाता है, तो हम दोहराव से बचते हैं और वैल्यूज़ को उससे कहीं ज़्यादा बराबर बाँट देते हैं, जितना यादृच्छिकता कभी करती। कोई नतीजा जो ज़रूरत से ज़्यादा सुव्यवस्थित दिखे, वह इंसान की छाप है; असली यादृच्छिकता गुच्छे बनाती है।
यह यादृच्छिक संख्या जनरेटर ही क्यों चुनें?
- केवल ब्राउज़र में जनरेट: संख्याएँ आपके डिवाइस पर बनती हैं और कभी कहीं और नहीं भेजी जातीं
- Web Crypto API के ज़रिए यादृच्छिकता: क्रिप्टोग्राफ़िक रूप से सुरक्षित, Math.random() नहीं
- कोई modulo bias नहीं: rejection sampling सीमा की हर संख्या के लिए बराबर संभावना बनाए रखता है
- कोई भी सीमा: 1 से 10 से लेकर अरबों तक फैली वैल्यूज़ तक, दोनों सीमाएँ शामिल
- 'दोहराव न होने दें' मोड: ड्रॉ और समूह बनाने के लिए दोहराव-रहित सूची जनरेट करें
- कई सेट: एक क्लिक में कई स्वतंत्र ड्रॉ
- क्रम और आउटपुट प्रारूप: आरोही या अवरोही, नई पंक्ति, स्पेस या कॉमा
- इतिहास और फ़ाइल में सेव: किसी ड्रॉ का रिकॉर्ड रखें, जिसे आपको बाद में साबित करना पड़ सकता है
- असीमित और मुफ़्त: कोई साइन-अप नहीं, इस्तेमाल की कोई सीमा नहीं, हमारे सर्वर पर कुछ भी सेव नहीं होता
यादृच्छिक संख्याएँ ज़्यादातर लोगों की सोच से कहीं ज़्यादा जगहों पर इस्तेमाल होती हैं। शिक्षक बिना किसी को तरजीह दिए छात्रों को बुलाते हैं। स्ट्रीमर और मार्केटिंग टीमें उस दर्शक वर्ग के सामने गिफ़्ट और ड्रॉ के विजेता तय करती हैं, जिन्हें नतीजे पर भरोसा करना होता है। खिलाड़ी खोए हुए पासे की जगह इसका इस्तेमाल करते हैं या तय करते हैं कि पहले कौन शुरू करेगा, और टूर्नामेंट में शुरुआती क्रम ड्रॉ से तय होता है। शोधकर्ता एक यादृच्छिक नमूना चुनते हैं, ताकि उनके निष्कर्ष उन लोगों पर भी लागू हों जिन्होंने शोध में हिस्सा नहीं लिया। डेवलपर टेस्ट डेटा जनरेट करते हैं, सिमुलेशन के लिए एक शुरुआती वैल्यू (seed) तय करते हैं, और QA के दौरान आइडेंटिफ़ायर चुनते हैं। इन सबमें साझा बात है एक यादृच्छिक चुनाव प्रक्रिया, जिसे बाद में समझाया जा सकता है: क्योंकि यह ड्रॉ क्रिप्टोग्राफ़िक यादृच्छिकता का इस्तेमाल करता है और पूरी तरह आपके डिवाइस पर होता है, इसलिए अगर कोई सवाल उठाए, तो आप दिखा सकते हैं कि नतीजा कैसे बना।
इस जनरेटर की कुछ ईमानदार सीमाएँ हैं, जिन्हें जानना ज़रूरी है। 'दोहराव न होने दें' मोड सीमा में मौजूद संख्याओं से ज़्यादा संख्याएँ जनरेट नहीं कर सकता: 1 और 10 के बीच बीस यूनीक वैल्यूज़ असल में मौजूद ही नहीं हैं। ड्रॉ स्वतंत्र होते हैं, और पिछले नतीजे अगले नतीजों को प्रभावित नहीं करते, इसलिए पेज रीफ़्रेश करने से कोई चक्र दोबारा शुरू नहीं होता — क्योंकि ऐसा कोई चक्र है ही नहीं, जिसमें आप हों। और भले ही संख्याएँ क्रिप्टोग्राफ़िक रूप से मज़बूत हों, यहाँ का ड्रॉ कोई भविष्यवाणी नहीं, बल्कि एक निष्पक्ष चुनाव है: आधिकारिक लॉटरी ड्रॉ अपने ख़ुद के भौतिक या प्रमाणित उपकरण इस्तेमाल करते हैं, और आपके ब्राउज़र में हुई किसी भी गणना का उनसे कोई संबंध नहीं है। इन सीमाओं के भीतर गारंटी मज़बूत बनी रहती है: आपकी सीमा में हर संख्या को हर अलग ड्रॉ में बिल्कुल बराबर मौक़ा मिलता है।