PHP का उपयोग कर [min - max] श्रेणी में यादृच्छिक संख्या


84

क्या एक न्यूनतम और अधिकतम के आधार पर एक यादृच्छिक संख्या उत्पन्न करने का एक तरीका है?

उदाहरण के लिए, यदि न्यूनतम 1 था और अधिकतम 20 तो उसे 1 और 20 के बीच कोई संख्या उत्पन्न करनी चाहिए, जिसमें 1 और 20 शामिल हैं?


1
नए php संस्करण में एक क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर है
साल्वाडोर डाली

1
PHP 7+ उपयोग random_int()के लिए random_bytes(), या openssl_random_pseudo_bytes() । जैसा कि @ साल्वाडोर डाली ने कहा कि rand()क्रिप्टोग्राफिक रूप से सुरक्षित परिणाम उत्पन्न नहीं करते हैं। प्रलेखन php.net/manual/en/function.rand.php
फ्रोजनफायर

जवाबों:


147
<?php
  $min=1;
  $max=20;
  echo rand($min,$max);
?>

मैंने सोचा था कि रैंड के लिए मिनट और अधिकतम अंकों की बजाय उपयोग करने के लिए अंकों की संख्या थी :) thnx
Val

संबंधित: यदि PHP_INT_MAX < ($max-$min), आपको एक साथ अंतराल जोड़ने की आवश्यकता है, जैसा कि इस उत्तर में वर्णित है ।
बिशप

PHP7.1 से पहले रैंड () बस खराब है। यह एलसीजी एल्गोरिथ्म का उपयोग करता है जो कि अनुमानित आउटपुट के साथ होता है। यह धीमी भी है। चूंकि PHP7.1 रैंड () को mt_rand का एक उपनाम बनाया गया है (इसलिए) अब बुरा नहीं है। PHP7 ने क्रिप्टोग्राफिक रूप से सुरक्षित random_int () भी पेश किया, हालांकि इसे तब तक टाला जाना चाहिए जब तक कि यह आवश्यक न हो, क्योंकि यह mt_rand () से बहुत धीमा है
xZero

34

एक नए PHP7 में एक क्रिप्टोग्राफिक रूप से सुरक्षित छद्म यादृच्छिक पूर्णांकों के लिए एक समर्थन है

int random_int ( int $min , int $max )

random_int - क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म-यादृच्छिक पूर्णांक उत्पन्न करता है

जो मूल रूप से पिछले उत्तरों को अप्रचलित बनाता है।


2
एक दम बढ़िया! लेकिन जब तक webhosts PHP7 को वैश्विक रूप से अधिक समर्थन करते हैं, यह दुर्भाग्य से वितरण के लिए किसी भी निर्माण उत्पादों के लिए उपयोगी नहीं है। तो पिछले जवाब कि ALSO काम करता है PHP7 पर अभी भी सबसे अच्छा अभ्यास कर रहे हैं।
मैट क्रॉमवेल

1
@MattCromwell। मैं तुमसे सहमत नहीं हूँ। जब तक होस्टिंग सेवाएं PHP7 का समर्थन नहीं करती हैं, तब तक हमें पॉलीफ़िल का उपयोग random_intऔर random_bytesफ़ंक्शन के लिए करना चाहिए - github.com/paragonie/random_compat
व्लादिमीर पॉसविस्टेलिक

मैं उत्सुक हूँ, वहाँ कभी नहीं का उपयोग करने के लिए एक कारण है random_int ? यदि यह "बेहतर" यादृच्छिक संख्या देता है, तो इसका उपयोग गैर-क्रिप्टो कारणों के लिए क्यों नहीं किया जाता है?
ब्रायन लीशमैन

1
@BrianLeishman मैं इसे हर चीज के लिए इस्तेमाल करूंगा। केवल नकारात्मक पक्ष जो मैं अनुमान लगा सकता हूं: यह शायद यादृच्छिकता के स्रोत पर निर्भर करता है और यदि आप यादृच्छिकता से बाहर हैं तो विफल हो सकते हैं। यह और अधिक महंगा हो सकता है (जाँच करने की आवश्यकता है) लेकिन मुझे संदेह है कि यह एक कार्य एक बड़ा अंतर बनाता है
सल्वाडोर डाली

मुझे पता है कि यह धीमा है, लेकिन यह पर्याप्त नहीं है कि वापस न जाएं और पहले से मौजूद random_intएस को बदल दें rand। इसके अलावा, मेरा उपयोग मामला एक पुन: प्रयास एल्गोरिथ्म है, और मैं निश्चित रूप से उम्मीद के मुताबिक निष्क्रियता के कारण सोने के बाद कई असफल कार्यों को नहीं करना चाहता हूं
ब्रायन लीशमैन

19

एक तेज़ तेज़ संस्करण mt_rand का उपयोग करेगा:

$min=1;
$max=20;
echo mt_rand($min,$max);

स्रोत: http://www.php.net/manual/en/function.mt-rand.php

नोट: आपके सर्वर को इस काम के लिए मठ PHP मॉड्यूल को सक्षम करने की आवश्यकता है। यदि यह नहीं है, तो अपने होस्ट को इसे सक्षम करने के लिए बग करें, या आपको सामान्य (और धीमे) रैंड () का उपयोग करना होगा।


6
आप तेजी से सही मतलब है? अंतर है (टाइपिंग == तेज बनाम तेज == प्रदर्शन बुद्धिमान)
वैल

english.stackexchange.com/questions/31732/… - वास्तव में दोनों हो सकते हैं
pee2pee


6

मैंने यहां जवाबों को बंडल कर दिया है और इसे स्वतंत्र संस्करण बना दिया है;

function generateRandom($min = 1, $max = 20) {
    if (function_exists('random_int')):
        return random_int($min, $max); // more secure
    elseif (function_exists('mt_rand')):
        return mt_rand($min, $max); // faster
    endif;
    return rand($min, $max); // old
}

4
rand(1,20)

PHP के रैंड फंक्शन के लिए डॉक्स यहां हैं:

http://php.net/manual/en/function.rand.php

srand()यादृच्छिक संख्या जनरेटर के बीज मूल्य निर्धारित करने के लिए फ़ंक्शन का उपयोग करें ।


0

इसको आजमाओ। यह आपकी इच्छा के अनुसार आईडी जनरेट करेगा।

function id()
{
 // add limit
$id_length = 20;

// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {

  // generate randomly within given character/digits
  @$token .= $alfa[rand(1, strlen($alfa))];

}    
return $token;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.