Android Kotlin में रैंडम नंबर जनरेशन: अंदर की कहानी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Android को 'पासा फेंकना' कैसे सिखाएं? Kotlin में रैंडम नंबर जनरेशन को समझें

\n\n

क्या आपने कभी सोचा है कि आपका फ़ोन 'रैंडम' नंबर कैसे चुनता है? यह एक आसान काम लगता है — 5 से 10 के बीच एक रैंडम पूर्णांक प्राप्त करना। लेकिन Android और Kotlin के अंदर एक पूरी मशीनरी छिपी है, जिस पर आपके ऐप की सुविधा ही नहीं, बल्कि सुरक्षा भी निर्भर करती है। यह कोई आश्चर्य की बात नहीं है कि Stack Overflow पर 'Android में एक निश्चित रेंज में रैंडम नंबर कैसे जनरेट करें?' सवाल के हज़ारों व्यूज़ हैं। हम सिर्फ़ एक तैयार जवाब नहीं देंगे — हम सोर्स कोड में झांकेंगे और समझेंगे कि वास्तव में क्या होता है।

\n\n

इस लेख में आप जानेंगे:

\n
    \n
  • Kotlin में एक निश्चित रेंज में रैंडम नंबर सही तरीके से कैसे जनरेट करें।
  • \n
  • kotlin.random.Random, java.util.Random और SecureRandom में क्या अंतर है।
  • \n
  • गेम के लिए एक क्लास क्यों ज़रूरी है और पासवर्ड जनरेशन के लिए दूसरी।
  • \n
  • उन सामान्य गलतियों से कैसे बचें जो 'रैंडमनेस' को 'अनुमान लगाने योग्य' बना देती हैं।
  • \n
\n\n

चलिए शुरू करते हैं!

\n\n

पारंपरिक तरीका: Kotlin में Random (और यह हमेशा सही क्यों नहीं है)

\n\n

सबसे आसान तरीका है kotlin.random.Random का उपयोग करना। यह सीधे भाषा में बिल्ट-इन है और बिना किसी सेटअप के काम करता है। 0 से 100 (दोनों सहित) के बीच रैंडम नंबर जनरेट करने का तरीका इस प्रकार है:

\n\n
import kotlin.random.Random\n\nfun main() {\n    val randomNumber = Random.nextInt(0, 101) // 0 से 100 तक (दोनों सहित)\n    println("रैंडम नंबर: $randomNumber")\n}
\n\n

यह बहुत सरल है। लेकिन आइए अंदर झांकते हैं। Random.nextInt(from, until) अंदरूनी तौर पर (JVM प्लेटफ़ॉर्म पर) java.util.Random का उपयोग करता है। और वह, बदले में, लीनियर कॉन्ग्रुएंशियल जनरेटर (LCG) की मदद से नंबर जनरेट करता है। इसका फ़ॉर्मूला सरल है:

\n\n

new_seed = (old_seed * A + C) mod M

\n\n

जहाँ A, C और M स्थिरांक हैं। यह तेज़ है, लेकिन क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं है। अगर कोई हैकर कुछ नंबर जान लेता है, तो वह seed को रिकवर करके बाकी सभी नंबरों का अनुमान लगा सकता है।

\n\n

कब उपयोग करें: गेम (पैसे वाले नहीं), लिस्ट से रैंडम आइटम चुनने, या सामान्य ऐप में कार्ड शफ़ल करने के लिए।

\n\n

एडवांस्ड लेवल: मल्टीथ्रेडिंग के लिए ThreadLocalRandom

\n\n

अगर आपका ऐप कोरूटीन या मल्टीथ्रेडिंग का भरपूर उपयोग करता है, तो सामान्य Random एक अड़चन बन सकता है। हर nextInt() कॉल सिंक्रोनाइज़ होती है ताकि रेस कंडीशन से बचा जा सके। इसका समाधान है Java का ThreadLocalRandom:

\n\n
import java.util.concurrent.ThreadLocalRandom\n\nfun getRandomInRange(min: Int, max: Int): Int {\n    return ThreadLocalRandom.current().nextInt(min, max + 1)\n}
\n\n

यह क्लास हर थ्रेड के लिए Random का एक अलग इंस्टेंस आवंटित करता है। सिंक्रोनाइज़ेशन की ज़रूरत नहीं — हर थ्रेड अपने जनरेटर के साथ काम करता है। व्यवहार में, यह मल्टीथ्रेडेड परिदृश्यों में प्रदर्शन को बढ़ाता है।

\n\n

सुरक्षा सर्वोपरि: SecureRandom

\n\n

अब कल्पना करें कि आप एक वन-टाइम पासवर्ड (OTP) या अकाउंट रिकवरी टोकन जनरेट कर रहे हैं। सामान्य Random का उपयोग करना एक अपराध होगा। यहाँ SecureRandom काम आता है:

\n\n
import java.security.SecureRandom\n\nfun generateSecureCode(length: Int): String {\n    val secureRandom = SecureRandom()\n    val digits = "0123456789"\n    return (1..length)\n        .map { digits[secureRandom.nextInt(digits.length)] }\n        .joinToString("")\n}
\n\n

SecureRandom ऑपरेटिंग सिस्टम के स्रोतों से एन्ट्रॉपी इकट्ठा करता है: माइक्रोफ़ोन का शोर, की-प्रेस का टाइमिंग (एमुलेटर में — /dev/random या /dev/urandom फ़ाइल से)। यह इसे अप्रत्याशित बनाता है। लेकिन इसकी कीमत गति के रूप में चुकानी पड़ती है — यह सामान्य Random से दस गुना धीमा हो सकता है।

\n\n

महत्वपूर्ण: Android पर S

ब्लॉग

पुस्तक अनुशंसाएँ