पटकन आणि निष्पक्षपणे एक यादृच्छिक संख्या हवी आहे? हा मोफत ऑनलाइन यादृच्छिक संख्या जनरेटर तुम्ही निवडलेल्या कोणत्याही श्रेणीत एक संख्या — किंवा संख्यांची संपूर्ण यादी — तयार करतो, मग ती १ ते १० इतकी सोपी श्रेणी असो किंवा अब्जावधीपर्यंत पसरलेली श्रेणी. 'किमान' आणि 'कमाल' बॉक्समध्ये सर्वात लहान आणि सर्वात मोठी व्हॅल्यू ठेवा, 'निवडीची संख्या' मध्ये किती संख्या हव्यात ते ठरवा, आणि 'तयार करा' वर क्लिक करा. दोन्ही मर्यादा निकालात समाविष्ट असतात, त्यामुळे १ ते १० ही श्रेणी १ आणि १० — दोन्ही देऊ शकते.
प्रत्येक निकाल थेट तुमच्या ब्राउझरमध्ये Web Crypto API (crypto.getRandomValues) च्या मदतीने तयार होतो — हे तुमच्या ब्राउझरच्या अंतर्गत प्रणालीकडून मिळणारी क्रिप्टोग्राफिक दृष्ट्या मजबूत यादृच्छिक व्हॅल्यूज देते. काहीही सर्व्हरवर पाठवले जात नाही, काहीही सेव्ह केले जात नाही, आणि आम्ही तुमच्या संख्या कधीही पाहत नाही. निर्मिती त्वरित आणि खासगी असते, आणि पेज लोड झाल्यानंतर संथ कनेक्शनवरही काम करत राहते.
हे पर्याय अशा खऱ्याखुऱ्या परिस्थितींसाठी बनवले आहेत, जिथे लोकांना खरोखरच यादृच्छिक संख्यांची गरज असते. एखादी संख्या दोनदा येऊ नये यासाठी 'पुनरावृत्ती टाळा' चालू करा — ही सोय रॅफल, लॉटरी-प्रकारच्या ड्रॉसाठी किंवा लोकांना पुनरावृत्तीशिवाय गटांमध्ये विभागण्यासाठी उपयोगी आहे. ५०० सहभागींमधून वीस विजेते हवे आहेत? 'किमान' १ वर आणि 'कमाल' ५०० वर ठेवा, 'पुनरावृत्ती टाळा' चालू करा, 'निवडीची संख्या' २० वर ठेवा, आणि 'तयार करा' वर क्लिक करा. 'क्रमवारी' निकाल चढत्या किंवा उतरत्या क्रमाने लावतो, आणि एका बटणाने सर्व निकाल कॉपी होतात. 'आउटपुट स्वरूप' 'नवीन ओळ' वरून 'स्पेसने विभक्त' किंवा 'स्वल्पविरामाने विभक्त' असे बदलल्यास 'संचांची संख्या' हा बॉक्स दिसतो: एकाच वेळी अनेक स्वतंत्र ड्रॉ — जसे की वीस ड्रॉ फेऱ्यांसाठी प्रत्येकी ३ संख्यांचे वीस संच — आणि 'संचांमध्ये पुनरावृत्तीला परवानगी द्या' हे ठरवते की एकच संख्या यांपैकी एकापेक्षा जास्त संचांत येऊ शकते का.
यादृच्छिकता प्रत्यक्षात कशी तयार होते? तुमचा ब्राउझर Math.random() सारख्या JavaScript PRNG ऐवजी Web Crypto API च्या मदतीने क्रिप्टोग्राफिक दृष्ट्या मजबूत यादृच्छिक व्हॅल्यूज देतो. 'तयार करा' वर क्लिक केल्यावर, पेज crypto.getRandomValues च्या मदतीने यादृच्छिक व्हॅल्यूज मागते आणि त्यांचा वापर करून तुम्ही निवडलेल्या श्रेणीत संख्या तयार करते. यादृच्छिकतेचा मूळ स्रोत ब्राउझर आणि ऑपरेटिंग प्रणालीकडून मिळतो, त्यामुळे पेजला स्वतःची सुरुवातीची व्हॅल्यू (seed) किंवा स्यूडो-यादृच्छिक क्रम राखून ठेवण्याची गरज नसते.
एखादी कच्ची व्हॅल्यू तुमच्या श्रेणीत बसवणे ही अशी जागा आहे, जिथे जनरेटर्स शांतपणे चुकतात, आणि ही गोष्ट स्वतंत्र परिच्छेदास पात्र आहे. व्हॅल्यूला श्रेणीच्या आकाराने भागून उरणारा भाग घेणे हा सर्वात सोपा मार्ग वाटतो, पण तो पक्षपाती आहे: श्रेणी बरोबर 2^32 ने भाग जात नसेल, तर सर्वात लहान संख्या इतरांपेक्षा किंचित जास्त वेळा येतात. या त्रुटीला modulo bias म्हणतात, आणि ती केवळ सैद्धांतिक नसून मोजता येण्याजोगी आहे. हा जनरेटर त्याऐवजी श्रेणीच्या सर्वात मोठ्या नेमक्या पटीच्या पलीकडची कोणतीही व्हॅल्यू टाकून देतो आणि पुन्हा प्रयत्न करतो — या तंत्राला rejection sampling म्हणतात. यासाठी काही जास्तीचे प्रयत्न लागतात, पण त्याबदल्यात एक अचूक हमी मिळते: 'किमान' आणि 'कमाल' यांच्यामधील प्रत्येक संख्येची शक्यता पूर्णपणे सारखी असते, जवळपास सारखी नाही.
एखादी संख्या खरोखर यादृच्छिक कशामुळे बनते? एखादी संख्या पुरेशी यादृच्छिक असते, जेव्हा आधीचे निकाल पुढच्याबद्दल काहीही सांगत नाहीत — आणि प्रत्यक्षात याचे तीन स्तर असतात. Math.random() सारखे साधे स्यूडो-यादृच्छिक फंक्शन एक निश्चित (deterministic) अल्गोरिदम चालवते: याची अंतर्गत स्थिती जाणणारी कोणतीही व्यक्ती संपूर्ण क्रम पुन्हा तयार करू शकते, ज्यामुळे ते स्लाइडशो शफल करण्यासाठी योग्य ठरते, पण जिथे निकाल भाकीत करता येऊ नये अशा कोणत्याही गोष्टीसाठी अयोग्य ठरते. एक क्रिप्टोग्राफिक दृष्ट्या सुरक्षित जनरेटर (CSPRNG) — जो स्तर हे टूल वापरते — हादेखील एक अल्गोरिदमच आहे, पण तो प्रणालीतील यादृच्छिकतेच्या सुरक्षित स्रोताचा वापर करून अनपेक्षित व्हॅल्यूज तयार करण्यासाठी डिझाइन केलेला आहे, आणि असा बनवला आहे की त्याचे आउटपुट पाहूनही पुढच्या व्हॅल्यूबद्दल काहीही समजत नाही. वातावरणीय आवाज किंवा किरणोत्सारी क्षय यांसारख्या स्रोतांमधून येणारी नैसर्गिक यादृच्छिकता या दोन्ही स्तरांच्याही वर असते, तरीही श्रेणीतून संख्या तयार करण्याचा प्रश्न येतो तेव्हा व्यावहारिक फरक नाहीसा होतो. याच कारणामुळे ब्राउझर्स फक्त Math.random() सुधारण्याऐवजी एक वेगळे क्रिप्टो API देतात: हे दोन्ही वेगवेगळ्या समस्या सोडवतात, आणि निकाल कोणासाठी तरी महत्त्वाचा असतो तेव्हा यांपैकी फक्त एकच सुरक्षित असतो.
यादृच्छिक क्रमाला लोकांना यादृच्छिक दिसणे गरजेचे नाही. १ आणि १० यांच्यामध्ये दहा संख्या तयार करा, आणि तुम्हाला वारंवार एक पुनरावृत्ती, ७, ७, ८ सारखा जवळचा छोटा समूह, किंवा असा छोटा क्रम दिसेल ज्यात सर्व संख्या मोठ्या असतील — आणि यांपैकी प्रत्येक गोष्ट अगदी सामान्य आहे. खरी यादृच्छिकता अनपेक्षित असते, समान रीतीने पसरलेली नसते: प्रत्येक संख्या आधीच्या संख्यांपासून स्वतंत्रपणे येते, आधीच्या संख्यांचा पुढच्या संख्यांवर अजिबात परिणाम होत नाही, आणि कोणत्याही संख्येला दुसऱ्या संख्येपेक्षा जास्त शक्यता नसते. उलट मानण्याची ही प्रवृत्ती म्हणजे जुगाऱ्याचा भ्रम, आणि हीच प्रवृत्ती लोकांना स्वतःच यादृच्छिक संख्या तयार करण्यात कमकुवत बनवते — जेव्हा आपल्याला स्वतः एक यादृच्छिक क्रम तयार करायला सांगितले जाते, तेव्हा आपण पुनरावृत्ती टाळतो आणि व्हॅल्यूज त्याहून कितीतरी जास्त समान प्रमाणात विभागतो, जेवढी यादृच्छिकता कधीच करणार नाही. जो निकाल गरजेपेक्षा जास्त नीटनेटका दिसतो, तो माणसाची खूण आहे; खरी यादृच्छिकता गुच्छ तयार करते.
हा यादृच्छिक संख्या जनरेटर का निवडावा?
- फक्त ब्राउझरमध्ये निर्मिती: संख्या तुमच्या डिव्हाइसवर तयार होतात आणि कधीही इतरत्र पाठवल्या जात नाहीत
- Web Crypto API द्वारे यादृच्छिकता: क्रिप्टोग्राफिक दृष्ट्या सुरक्षित, Math.random() नाही
- कोणताही modulo bias नाही: rejection sampling श्रेणीतील प्रत्येक संख्येसाठी समान शक्यता राखते
- कोणतीही श्रेणी: १ ते १० पासून अब्जावधीपर्यंत पसरलेल्या व्हॅल्यूजपर्यंत, दोन्ही मर्यादा समाविष्ट
- 'पुनरावृत्ती टाळा' मोड: ड्रॉ आणि गट बनवण्यासाठी पुनरावृत्तीविरहित यादी तयार करा
- अनेक संच: एका क्लिकवर अनेक स्वतंत्र ड्रॉ
- क्रमवारी आणि आउटपुट स्वरूप: चढत्या किंवा उतरत्या क्रमाने, नवीन ओळ, स्पेस किंवा कॉमा
- इतिहास आणि फाइलमध्ये सेव्ह: एखाद्या ड्रॉचा रेकॉर्ड ठेवा, जो तुम्हाला नंतर सिद्ध करावा लागू शकतो
- अमर्यादित आणि मोफत: साइन-अप नाही, वापराची मर्यादा नाही, आमच्या सर्व्हरवर काहीही सेव्ह होत नाही
यादृच्छिक संख्या बहुतेक लोकांच्या कल्पनेपेक्षा कितीतरी जास्त ठिकाणी वापरल्या जातात. शिक्षक कोणाला विशेष झुकते माप न देता विद्यार्थ्यांना बोलावतात. स्ट्रीमर्स आणि मार्केटिंग टीम्स प्रेक्षकांसमोर गिवअवे आणि ड्रॉचे विजेते निवडतात, जेणेकरून प्रेक्षकांना निकालावर विश्वास ठेवता येईल. खेळाडू हरवलेला फासा बदलतात किंवा कोण आधी सुरुवात करेल हे ठरवतात, आणि स्पर्धांमध्ये सुरुवातीचा क्रम ड्रॉने ठरतो. संशोधक यादृच्छिक नमुने निवडतात, जेणेकरून त्यांचे निष्कर्ष स्वेच्छेने सहभागी झालेल्या लोकांपुरते मर्यादित राहू नयेत. डेव्हलपर्स चाचणी डेटा तयार करतात, सिम्युलेशनसाठी एक सुरुवातीची व्हॅल्यू (seed) ठरवतात, आणि QA दरम्यान आयडेंटिफायर्स निवडतात. या सर्वांमध्ये समान धागा आहे तो म्हणजे एक यादृच्छिक निवड प्रक्रिया, जी नंतर स्पष्ट करता येते: कारण हा ड्रॉ क्रिप्टोग्राफिक यादृच्छिकता वापरतो आणि पूर्णपणे तुमच्या डिव्हाइसवर घडतो, त्यामुळे कोणी प्रश्न उपस्थित केल्यास तुम्ही निकाल कसा तयार झाला हे दाखवू शकता.
या जनरेटरला काही प्रामाणिक मर्यादा आहेत, ज्या जाणून घेणे गरजेचे आहे. 'पुनरावृत्ती टाळा' मोड श्रेणीत असलेल्या संख्यांपेक्षा जास्त संख्या तयार करू शकत नाही: १ आणि १० यांच्यामध्ये वीस युनिक व्हॅल्यूज मुळातच अस्तित्वात नाहीत. ड्रॉ स्वतंत्र असतात, आणि आधीचे निकाल पुढच्या निकालांवर परिणाम करत नाहीत, त्यामुळे पेज रिफ्रेश केल्याने कोणतेही चक्र पुन्हा सुरू होत नाही — कारण असे कोणतेही चक्र नाहीच, ज्यात तुम्ही असाल. आणि संख्या क्रिप्टोग्राफिक दृष्ट्या मजबूत असल्या तरी, इथला ड्रॉ म्हणजे भाकीत नसून एक निष्पक्ष निवड आहे: अधिकृत लॉटरी ड्रॉ स्वतःची भौतिक किंवा प्रमाणित उपकरणे वापरतात, आणि तुमच्या ब्राउझरमध्ये केलेल्या कोणत्याही गणनेचा त्यांच्याशी काहीही संबंध नाही. या मर्यादांच्या आत हमी मजबूत राहते: तुमच्या श्रेणीतील प्रत्येक संख्येला प्रत्येक वेगळ्या ड्रॉमध्ये अगदी सारखी संधी असते.