> रैंडम नंबर जनरेटर <
// क्रिप्टोग्राफ़िक रूप से रैंडम पूर्णांक और दशमलव संख्याएँ बनाएँ —— या पुनरुत्पाद्य रन के लिए इसे सीड करें
क्रिप्टोग्राफ़िक रैंडमनेस
डिफ़ॉल्ट रूप से रिजेक्शन सैंपलिंग के साथ crypto.getRandomValues() का उपयोग करता है, ताकि आपकी रेंज में हर पूर्णांक की समान संभावना हो —— शून्य मॉड्यूलो पूर्वाग्रह।
पुनरुत्पाद्य सीडेड मोड
किसी भी सीड स्ट्रिंग को प्रदान करके एक नियतात्मक mulberry32 PRNG पर स्विच करें। समान सीड, समान संख्याएँ —— परीक्षण और सिमुलेशन के लिए उत्तम।
कोई दोहराव नहीं मोड
Fisher-Yates शैली की सैंपलिंग के माध्यम से अद्वितीय पूर्णांक बनाएँ। लॉटरी ड्रॉ, रैफ़ल चयन, या बिना प्रतिस्थापन के नमूनाकरण के लिए बढ़िया।
दशमलव परिशुद्धता नियंत्रण
दशमलव मोड पर स्विच करें और 1–10 स्थान चुनें। संख्याएँ [न्यूनतम, अधिकतम) पर समान रूप से वितरित होती हैं और आपकी चुनी हुई परिशुद्धता पर पूर्णांकित की जाती हैं।
// रैंडम नंबर जनरेशन के बारे में
यह कैसे काम करता है:
जब सीड फ़ील्ड खाली होता है तो यह टूल crypto.getRandomValues(new Uint32Array(1)) को कॉल करता है, जो आपके ऑपरेटिंग सिस्टम के एंट्रॉपी पूल द्वारा समर्थित एक CSPRNG (क्रिप्टोग्राफ़िक रूप से सुरक्षित PRNG) है। एक 32-बिट अहस्ताक्षरित पूर्णांक को बिना मॉड्यूलो पूर्वाग्रह के किसी भी [min, max] रेंज पर मैप करने के लिए जनरेटर रिजेक्शन सैंपलिंग का उपयोग करता है: 2^32 में फ़िट होने वाली रेंज के सबसे बड़े गुणज से ऊपर का कोई भी ड्रॉ त्याग दिया जाता है और फिर से निकाला जाता है। जब आप एक सीड प्रदान करते हैं, तो स्ट्रिंग को cyrb53 के साथ एक 32-बिट पूर्णांक में हैश किया जाता है और mulberry32 में फ़ीड किया जाता है, जो 2^32 अवधि वाला एक तेज़ 32-बिट PRNG है —— नियतात्मक और पुनरुत्पाद्य। दशमलव मोड एक समान [0,1) नमूने को [min, max) में स्केल करता है, फिर toFixed(places) के साथ प्रारूपित करता है।
उदाहरण:
min=1, max=100, count=5, seed="hello" -> 39, 98, 64, 12, 71 (हमेशा)
मानक और संदर्भ:
- >Web Crypto API (W3C) —— CSPRNG के लिए
crypto.getRandomValues()अनुबंध - >RFC 4086 —— Randomness Requirements for Security
- >mulberry32 —— Tommy Ettinger द्वारा 32-बिट PRNG, सार्वजनिक डोमेन
- >cyrb53 —— सीडिंग के लिए तेज़ 53-बिट स्ट्रिंग हैश (bryc, सार्वजनिक डोमेन)
सामान्य उपयोग के मामले:
- >प्रमाण्य रूप से अद्वितीय चयनों के साथ लॉटरी और रैफ़ल ड्रॉ
- >सर्वेक्षणों और ऑडिट के लिए बिना प्रतिस्थापन के रैंडम नमूनाकरण
- >मोंटे कार्लो सिमुलेशन और सांख्यिकीय प्रयोग
- >पुनरुत्पाद्य सीडेड असाइनमेंट के साथ A/B परीक्षण बकेटिंग
- >गेम मैकेनिक्स: पासे के विकल्प, लूट टेबल, लेवल सीड
- >QA परीक्षण डेटा और फ़ज़िंग इनपुट जनरेशन
- >बैठकों में विजेताओं, न्यायाधीशों, या पहले प्रस्तुतकर्ताओं का चयन
- >प्रोटोटाइप और डेमो के लिए सिंथेटिक डेटा जनरेशन
संबंधित टूल:
- >UUID जनरेटर —— जब आपको किसी संख्या के बजाय एक अद्वितीय ID की आवश्यकता हो तब रैंडम v4 पहचानकर्ता
- >पासवर्ड जनरेटर —— वर्ण पूल नियंत्रण के साथ क्रिप्टोग्राफ़िक रूप से रैंडम स्ट्रिंग्स
- >BIP39 जनरेटर —— क्रिप्टो वॉलेट के लिए रैंडम स्मरक सीड वाक्यांश
- >randompickerwheel.app —— जब आप लाइव दर्शकों या बच्चों की कक्षा के लिए एक दृश्य रैंडम चयनकर्ता चाहते हैं तब घूमने वाला पहिया UI
// उदाहरण आउटपुट
लॉटरी ड्रॉ —— 1-49 में से 6 अद्वितीय संख्याएँ
min=1, max=49, count=6, no-duplicates=on, sort=ascending
output:
7, 13, 22, 28, 35, 41
पासे का विकल्प —— दस d20 रोल (दोहराव की अनुमति)
min=1, max=20, count=10, no-duplicates=off, sort=none
output:
14, 3, 20, 11, 7, 14, 2, 19, 8, 11
दशमलव नमूनाकरण —— 4 दशमलव स्थानों के साथ [0, 1) में 5 फ़्लोट
type=decimal, min=0, max=1, count=5, places=4
output:
0.4172, 0.8635, 0.0291, 0.5508, 0.7723
सीडेड पुनरुत्पाद्य —— समान सीड समान अनुक्रम देता है
min=1, max=100, count=5, seed="hello" (दो बार चलाएँ)
output:
रन 1: 39, 98, 64, 12, 71 / रन 2: 39, 98, 64, 12, 71
बकेटिंग —— पूर्णांक मॉड्यूलो के माध्यम से 100 भारित A/B चयन
min=0, max=99, count=100, seed="experiment-42", sort=ascending
output:
0, 1, 3, 4, 7, 9, 12, ... 95, 97, 98, 99 (नियतात्मक)
// इसे स्वयं लागू करें
यदि आप एल्गोरिथ्म को सीधे अपने स्वयं के प्रोजेक्ट में डालना पसंद करते हैं, तो यहाँ वे तीन प्रिमिटिव हैं जिन पर यह टूल बना है। साथ मिलकर ये अपूर्वाग्रही क्रिप्टोग्राफ़िक पूर्णांक, नियतात्मक सीडेड स्ट्रीम, और किसी मनमानी स्ट्रिंग सीड को 32-बिट PRNG स्थिति में बदलने को कवर करते हैं। सभी सार्वजनिक डोमेन या MIT-समतुल्य हैं।
[min, max] में क्रिप्टोग्राफ़िक रूप से सुरक्षित पूर्णांक (कोई मॉड्यूलो पूर्वाग्रह नहीं)
function secureRandomInt(min, max) {
const range = max - min + 1;
const buf = new Uint32Array(1);
const max32 = 0xFFFFFFFF;
const limit = Math.floor((max32 + 1) / range) * range;
let v;
do {
crypto.getRandomValues(buf);
v = buf[0];
} while (v >= limit);
return min + (v % range);
}
mulberry32 —— नियतात्मक सीडेड PRNG (32-बिट स्थिति, ~2^32 अवधि)
function mulberry32(seed) {
let a = seed >>> 0;
return function () {
a = (a + 0x6D2B79F5) | 0;
let t = a;
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
// usage: const rng = mulberry32(0xC0FFEE);
// rng(); // 0.6743..., reproducible across runs
cyrb53 —— तेज़ स्ट्रिंग-से-32बिट हैश (mulberry32 को सीड करने के लिए उपयोग करें)
function cyrb53(str, seed) {
seed = seed || 0;
let h1 = 0xdeadbeef ^ seed;
let h2 = 0x41c6ce57 ^ seed;
for (let i = 0; i < str.length; i++) {
const ch = str.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^
Math.imul(h2 ^ (h2 >>> 13), 3266489909);
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^
Math.imul(h1 ^ (h1 >>> 13), 3266489909);
return (h1 >>> 0);
}
// const rng = mulberry32(cyrb53('my-seed-string'));
// सामान्य कमियाँ
> मॉड्यूलो पूर्वाग्रह
जब रेंज दो की घात नहीं होती तो साधारण Math.floor(Math.random() * range) उच्च बिट्स को असमान रूप से वितरित करता है —— कुछ आउटपुट दूसरों की तुलना में थोड़ा अधिक बार आते हैं। रेंज से बाहर के ड्रॉ को त्यागने और वितरण को समान रखने के लिए रिजेक्शन सैंपलिंग (ऊपर का स्निपेट) का उपयोग करें।
> Math.random() क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं है
Math.random() V8/Spidermonkey में xorshift128+ का उपयोग करता है, जो तेज़ है लेकिन पूर्वानुमेय है: कुछ आउटपुट देखने वाला हमलावर आंतरिक स्थिति को पुनः प्राप्त कर सकता है और भविष्य के मानों का पूर्वानुमान लगा सकता है। टोकन, सॉल्ट, निष्पक्षता-महत्वपूर्ण लॉटरी ड्रॉ, या किसी भी चीज़ के लिए जिसकी विरोधी को परवाह हो, हमेशा crypto.getRandomValues() का उपयोग करें।
> सीडेड PRNG नियतात्मक होते हैं —— इन्हें कभी सुरक्षा के लिए उपयोग न करें
Mulberry32 और इसके साथी दोहराने के लिए डिज़ाइन किए गए हैं। यही वह है जो आप परीक्षण, सिमुलेशन, और बकेटिंग के लिए चाहते हैं —— और यही वह है जो आप पासवर्ड रीसेट टोकन या सत्र ID के लिए नहीं चाहते। यदि आप पाते हैं कि आप किसी उपयोगकर्ता-सामने वाली या प्रमाणीकरण-निकट चीज़ में सीड डाल रहे हैं, तो तुरंत CSPRNG पर वापस स्विच करें।
> उच्च गिनती पर दोहराव-अस्वीकृति क्षमता को समाप्त कर देती है
आकार n की रेंज से k अद्वितीय पूर्णांक माँगना जहाँ k n के निकट पहुँचता है, एक कूपन-कलेक्टर समस्या बन जाती है: अंतिम कुछ चयन घातीय रूप से महँगे हो जाते हैं। यह टूल 10,000 पर सीमित करता है और Fisher-Yates आंशिक नमूनाकरण का उपयोग करता है ताकि क्षमता सटीक हो, लेकिन seen.has(x) के साथ एक साधारण while लूप k > n होने पर चुपचाप अटक जाएगा। हमेशा पहले से क्षमता जाँचें।
>> अक्सर पूछे जाने वाले प्रश्न
प्र: क्या यह रैंडम नंबर जनरेटर क्रिप्टोग्राफ़िक रूप से सुरक्षित है?
उ: हाँ, डिफ़ॉल्ट रूप से। जब आप SEED फ़ील्ड को खाली छोड़ते हैं तो टूल Web Crypto API के CSPRNG crypto.getRandomValues() का उपयोग करता है, जो Linux/macOS पर /dev/urandom से और Windows पर BCryptGenRandom से पढ़ता है। हम रिजेक्शन सैंपलिंग भी लागू करते हैं ताकि 32-बिट पूर्णांक से आपकी कस्टम रेंज तक की मैपिंग अपूर्वाग्रही हो। आउटपुट टोकन बनाने, सॉल्ट चुनने, या निष्पक्ष लॉटरी चलाने जैसे सुरक्षा-निकट कार्यों के लिए उपयुक्त है। ध्यान दें कि सीड प्रदान करना एक नियतात्मक PRNG (mulberry32) पर स्विच करता है, जो क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं है —— इसका उपयोग केवल तब करें जब पुनरुत्पाद्यता गोपनीयता से अधिक मायने रखती हो।
प्र: सीडेड और बिना-सीडेड मोड में क्या अंतर है?
उ: बिना-सीडेड मोड (डिफ़ॉल्ट) आपके ब्राउज़र के CSPRNG का उपयोग करता है और हर क्लिक पर ताज़ी, अप्रत्याशित संख्याएँ उत्पन्न करता है —— वही कॉल कभी भी एक ही अनुक्रम दो बार वापस नहीं करेगी। सीडेड मोड सीड स्ट्रिंग को cyrb53 के साथ एक 32-बिट पूर्णांक में हैश करता है और इसे एक नियतात्मक PRNG mulberry32 में फ़ीड करता है। समान सीड और समान सेटिंग्स हमेशा समान अनुक्रम देती हैं, जो पुनरुत्पाद्य प्रयोगों, यादृच्छिक कोड को डीबग करने, परीक्षण फ़िक्स्चर साझा करने, या A/B परीक्षण बकेटिंग के लिए अमूल्य है जहाँ हर उपयोगकर्ता को हमेशा एक ही बकेट में जाना चाहिए।
प्र: कोई-दोहराव-नहीं विकल्प कैसे काम करता है?
उ: पूर्णांकों के लिए, कोई-दोहराव-नहीं रेंज [min..max] से Fisher-Yates से प्रेरित आंशिक फेरबदल का उपयोग करके निकालता है जो कभी दोहराए बिना पहले k तत्व देता है। हम एक विरल स्वैप मानचित्र का उपयोग करते हैं ताकि मेमोरी उपयोग O(range) के बजाय O(count) रहे, जिसका अर्थ है कि 1 से 1,000,000 में से 10 अद्वितीय संख्याओं का ड्रॉ 1 से 100 में से 10 जितना ही सस्ता है। यदि आप रेंज की आपूर्ति से अधिक अद्वितीय संख्याएँ माँगते हैं (जैसे 1–10 में 20 अद्वितीय पूर्णांक), तो टूल हमेशा के लिए लूप करने के बजाय एक स्पष्ट क्षमता त्रुटि की रिपोर्ट करता है।
प्र: क्या मैं दशमलव (फ़्लोटिंग-पॉइंट) रैंडम संख्याएँ बना सकता हूँ?
उ: हाँ। TYPE रेडियो को दशमलव पर सेट करें और 1 से 10 स्थानों के बीच एक परिशुद्धता चुनें। जनरेटर [0, 1) में एक समान फ़्लोट निकालता है, इसे [min, max) में स्केल करता है, फिर toFixed(places) के साथ पूर्णांकित करता है और वापस एक संख्या में पार्स करता है। ध्यान दें कि दशमलव मोड में max अनन्य है (यह इस बात का दुष्प्रभाव है कि फ़्लोटिंग-पॉइंट समानता कैसे परिभाषित होती है)। अधिकांश सांख्यिकीय उपयोगों के लिए 4–6 दशमलव स्थान पर्याप्त हैं; दस स्थान सामान्य छोटी रेंज के लिए IEEE 754 डबल परिशुद्धता की सीमा के निकट पहुँचते हैं।
प्र: क्या कोई अधिकतम गिनती है?
उ: गिनती प्रति क्लिक 10,000 संख्याओं पर सीमित है। यह पृष्ठ को फ़ोन पर प्रतिक्रियाशील रखता है और बहुत बड़े टेक्स्टएरिया के आसपास किनारे-केस ब्राउज़र व्यवहार से बचाता है। यदि आपको लाखों मानों की आवश्यकता है, तो विभिन्न सीड के साथ कई बैच चलाएँ और आउटपुट को जोड़ें, या एल्गोरिथ्म को एक Node स्क्रिप्ट में कॉपी करें —— वही mulberry32 / cyrb53 जोड़ी सर्वर-साइड भी काम करती है। UX कारणों से, क्रमबद्धता, कॉपी, और डाउनलोड सभी क्लाइंट-साइड होते हैं, इसलिए 10k एक समझदार सीमा है जो फिर भी एक आधुनिक लैपटॉप पर एक मिलीसेकंड से काफ़ी कम में पूरी हो जाती है।
प्र: क्या मेरा डेटा कहीं अपलोड होता है?
उ: नहीं। हर ऑपरेशन आपके ब्राउज़र में सादे JavaScript के रूप में चलता है: संख्या जनरेशन, क्रमबद्धता, सांख्यिकी, क्लिपबोर्ड पर कॉपी, और .txt फ़ाइल डाउनलोड। जब आप GENERATE, COPY, या DOWNLOAD पर क्लिक करते हैं तो हमारे सर्वरों को कोई अनुरोध नहीं भेजा जाता —— आप इसे अपने ब्राउज़र के नेटवर्क टैब से सत्यापित कर सकते हैं। हम सीड, रेंज, या आउटपुट लॉग नहीं करते। पृष्ठ एक CDN से HTTPS पर परोसा गया स्थिर HTML है, इसलिए आपके इनपुट के बारे में कुछ भी हमारे लिए कभी अवलोकनीय नहीं होता। यह टूल को गोपनीय परीक्षण फ़िक्स्चर, आंतरिक लॉटरी सीड, या किसी भी अन्य चीज़ के लिए सुरक्षित बनाता है जिसे आप तृतीय-पक्ष सर्वरों से दूर रखना पसंद करेंगे।
प्र: क्या मैं दशमलव संख्याएँ बनाते समय दोहराव से बच सकता हूँ?
उ: हाँ, कोई-दोहराव-नहीं चेकबॉक्स एक सर्वोत्तम-प्रयास पुनः-प्रयास लूप का उपयोग करके दशमलव पर भी लागू होता है। चूँकि दो स्वतंत्र रूप से नमूना किए गए फ़्लोट बिट स्तर पर लगभग कभी टकराते नहीं हैं, इसलिए दोहराव दुर्लभ होते हैं जब तक कि आपकी रेंज परिशुद्धता के सापेक्ष बहुत छोटी न हो (जैसे, min=0, max=1, places=2 में केवल 100 भिन्न मान होते हैं)। यदि लूप उचित संख्या में प्रयासों के भीतर पर्याप्त अद्वितीय मान नहीं पा सकता, तो टूल एक क्षमता त्रुटि की रिपोर्ट करता है ताकि आप रेंज को चौड़ा कर सकें या परिशुद्धता बढ़ा सकें। सख्ती से गारंटीकृत अद्वितीय दशमलव के लिए, पूर्णांक मोड को प्राथमिकता दें और परिणाम को स्वयं विभाजित करें।
प्र: मुझे संख्याओं की सूची के बजाय घूमने वाला पहिया कब उपयोग करना चाहिए?
उ: संख्याओं की सूची बैच कार्यों के लिए सर्वोत्तम है: 50 लॉटरी टिकट निकालना, परीक्षण डेटा बनाना, या किसी सिमुलेशन को फ़ीड करना। घूमने वाला पहिया तब बेहतर है जब एक व्यक्ति दर्शकों के सामने एक वस्तु चुनता है और आप रोमांच और दृश्य प्रतिफल चाहते हैं —— कक्षा में नाम चयन, लाइवस्ट्रीम उपहार, बच्चों के काम की बारी, निर्णय-लेने वाली बैठकें। यदि यह आपका उपयोग का मामला है, तो randompickerwheel.app देखें, जो ठीक उसी क्षण के लिए बनाया गया एक इंटरैक्टिव घूमने वाला पहिया UI प्रदान करता है। दोनों टूल समान CSPRNG प्रिमिटिव से निकालते हैं —— अंतर प्रस्तुति में है, निष्पक्षता में नहीं।