बेहतर यादृच्छिक जनरेटिंग PHP

मुझे पता है कि बस rand() का उपयोग अनुमानित है, यदि आप जानते हैं कि आप क्या कर रहे हैं, और सर्वर तक पहुंच है।

मेरे पास एक ऐसी परियोजना है जो अत्यधिक एक यादृच्छिक संख्या चुनने पर निर्भर है जो संभवतः अप्रत्याशित है। तो मैं सुझावों की तलाश में हूं, या तो अन्य अंतर्निर्मित फ़ंक्शंस या उपयोगकर्ता फ़ंक्शन, जो बेहतर यादृच्छिक संख्या उत्पन्न कर सकते हैं।

मैंने थोड़ा परीक्षण करने के लिए इसका इस्तेमाल किया:

$i = 0;

while($i < 10000){
    $rand = rand(0, 100);

    if(!isset($array[$rand])){
        $array[$rand] = 1;
    } else {
        $array[$rand]++;
    }

    sort($array);
    $i++;
}

मैंने परिणामों को समान रूप से वितरित करने के लिए पाया, और प्रत्येक संख्या उत्पन्न होने की संख्या के लिए एक विषम पैटर्न है।

0
ro fr bn
Php7 में एक नया फ़ंक्शन है, जो आपको वही करता है जो आपको चाहिए
जोड़ा लेखक Salvador Dali, स्रोत

6 उत्तर

random.org has an API you can access via HTTP.

RANDOM.ORG एक वास्तविक यादृच्छिक संख्या सेवा है जो यादृच्छिकता उत्पन्न करती है   वायुमंडलीय शोर के माध्यम से।

0
जोड़ा

रैंड के लिए बीज के रूप में EPOCH के बाद मिलीसेकंड का उपयोग करके @ केजी पर भिन्नता?

0
जोड़ा
Sooooo, आज के तेज़ बहु-कोर कंप्यूटर के साथ, आपके पास बीज का दोबारा उपयोग करने का एक बहुत अच्छा मौका है, कई बार? भारी लाल झंडा - आप स्क्वायर व्हील को फिर से शुरू कर रहे हैं, यहां तक ​​कि srand() बिना किसी तर्क के बेहतर ("अधिक यादृच्छिक") काम करता है।
जोड़ा लेखक Piskvor, स्रोत

A new PHP7 there is a function that does exactly what you needed: it generates cryptographically secure pseudo-random integers.

int random_int ( int $min , int $max )

क्रिप्टोग्राफिक यादृच्छिक पूर्णांक उत्पन्न करता है जो उपयोग के लिए उपयुक्त हैं   जहां निष्पक्ष परिणाम महत्वपूर्ण हैं (यानी पोकर डेक को घुमाते हुए)।

पीआरएनजी और सीएसपीआरएनजी (और उनके अंतर) के साथ-साथ आपका मूल दृष्टिकोण वास्तव में एक बुरा विचार क्यों है, इसके बारे में अधिक विस्तृत स्पष्टीकरण के लिए, कृपया मेरे पढ़ें एक और अत्यधिक समान जवाब

0
जोड़ा

खराब यादृच्छिक स्रोत जोड़ना, गुणा करना या छंटनी करना आपको एक खराब यादृच्छिक परिणाम देगा। स्पष्टीकरण के लिए यादृच्छिकता और यादृच्छिक संख्याओं का परिचय देखें।

आप PHP rand() फ़ंक्शन के बारे में सही हैं। एक हड़ताली चित्रण के लिए सांख्यिकीय विश्लेषण पर दूसरा आंकड़ा देखें। (पहला आंकड़ा हड़ताली है, लेकिन इसे स्कॉट एडम्स द्वारा खींचा गया है, जो रैंड() के साथ प्लॉट नहीं किया गया है)।

एक समाधान एक वास्तविक यादृच्छिक जनरेटर का उपयोग करना है जैसे कि random.org । एक और, यदि आप लिनक्स / बीएसडी / आदि पर हैं। / dev / random का उपयोग करना है। यदि यादृच्छिकता मिशन महत्वपूर्ण है, तो आपको एक हार्डवेयर यादृच्छिक जनरेटर का उपयोग करना होगा।

0
जोड़ा

मैं यादृच्छिकता की छाप से सावधान रहूंगा: कई प्रयोग हुए हैं जहां लोग कम यादृच्छिक वितरण का चयन करेंगे। ऐसा लगता है कि मनोदशा पैदा करने या अनुमान लगाने में मन बहुत अच्छा नहीं है।

Fourmilab पर यादृच्छिकता पर अच्छे लेख हैं, जिनमें असली यादृच्छिक जनरेटर । हो सकता है कि आप दोनों साइटों से यादृच्छिक डेटा प्राप्त कर सकें ताकि यदि कोई नीचे है तो आपके पास अभी भी दूसरा है।

Fourmilab यादृच्छिकता जांचने के लिए एक परीक्षण कार्यक्रम भी प्रदान करता है। आप अपने विभिन्न myRand() प्रोग्रामों की जांच के लिए इसका उपयोग कर सकते हैं।

आपके अंतिम कार्यक्रम के लिए, यदि आप 10000 मूल्य उत्पन्न करते हैं, तो आप 10 हजार के बीच अंतिम मूल्य क्यों नहीं चुनते? आप स्वयं को सबसेट में प्रतिबंधित करते हैं। साथ ही, यह काम नहीं करेगा यदि आपका $ मिनट और $ अधिकतम 10000 से अधिक है।

वैसे भी, आपको आवश्यक यादृच्छिकता आपके आवेदन पर निर्भर करती है। रैंड() एक ऑनलाइन गेम के लिए ठीक रहेगा, लेकिन क्रिप्टोग्राफी के लिए ठीक नहीं है (सांख्यिकीय कार्यक्रमों के साथ पूरी तरह से परीक्षण नहीं किया गया है, वैसे भी क्रिप्टोग्राफी के लिए उपयुक्त नहीं होगा)। आप ही फैन्सला करें!

0
जोड़ा

यूयूआईडी प्राप्त करने के लिए अवधारणा में समान यादृच्छिक संख्या प्राप्त करने का एक और तरीका

PHP संस्करण 5.3 और ऊपर

openssl_random_pseudo_bytes(...)

या आप RFC4122 का उपयोग कर निम्न लाइब्रेरी आज़मा सकते हैं

0
जोड़ा