php隨機數概率
問題有點模糊,我先暫時把「保留兩位小數」理解成「[輸出的隨機數]保留兩位小數」,而非其他因素保留多少小數。
又把「1-10」,理解成包括1和10在內其兩數之間的小數,
把10-50,理解成10.01到50.00之間的數,不包括10.00。以此類推。
<?php
functiongenRandom(){
$p=rand(1,100);
if($p<=60)$r=rand(100,1000);
elseif($p>60and$p<=85)$r=rand(1001,5000);
elseif($p>85and$p<=95)$r=rand(5001,10000);
else$r=rand(10001,20000);
return$r/100;
}
$a=array();
$total=50000;
for($i=0;$i<$total;$i++){
$c=genRandom();
if($c>=1and$c<=10)$p=0;
elseif($c>10and$c<=50)$p=1;
elseif($c>50and$c<=100)$p=2;
elseif($c>100and$c<=200)$p=3;
else$p=4;
if(!array_key_exists($p,$a))$a[$p]=1;
else$a[$p]++;
}
if(!array_key_exists(4,$a))$a[4]=0;
echo"總樣本數".$total.'<br/>';
echo"1-10樣本數".$a[0].',占'.($a[0]/$total*100).'%<br/>';
echo">10-50樣本數".$a[1].',占'.($a[1]/$total*100).'%<br/>';
echo">50-100樣本數".$a[2].',占'.($a[2]/$total*100).'%<br/>';
echo">100-200樣本數".$a[3].',占'.($a[3]/$total*100).'%<br/>';
echo"其他樣本數".$a[4].',占'.($a[4]/$total*100).'%<br/>';
總樣本數50000
1-10樣本數30052,佔60.104%
>10-50樣本數12404,佔24.808%
>50-100樣本數4993,佔9.986%
>100-200樣本數2551,佔5.102%
其他樣本數0,佔0%
B. 怎麼用php中的random模塊求隨機數
在PHP中,生成隨機數可以使用random_int()和rand()函數,具體方法如下:
首先,rand($min, $max)用於生成一個指定范圍內的隨機整數。
下面是一個示例:
然而,在PHP 7中,random_int()函數被引入,以生成更安全的隨機數。對於較舊的PHP版本,rand()函數可用,但其隨機性可能不夠安全。
生成隨機數時需指定隨機數種子。若未指定,每次生成的隨機數將相同。可調用srand()函數設置種子,或在rand()函數或random_int()函數的第三個參數中設置種子,以確保生成的隨機數具有足夠的隨機性。例如:
在本例中,srand()使用了當前時間的微秒數作為種子,確保每次生成的隨機數不同。
需要注意的是,生成的隨機數僅是偽隨機數,不能保證完全隨機。在安全場景中,應使用更安全的隨機數生成方法,如OpenSSL庫中的隨機數生成函數。
C. php怎麼生成6位隨機數,php隨機數例子
通常情況下,當我們要生成一個隨機字元串時,總是先創建一個字元池,然後用一個循環和mt_rand()或rand()生成php隨機數,從字元池中隨機選取字元,最後拼湊出需要的長度。代碼如下:
function randomkeys($length)
{
$pattern = '
ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&l
t;>?;#:@~[]{}-_=+)(*&^%___FCKpd___0pound;"!'; //字元池
for($i=0;$i<$length;$i++)
{
$key .= $pattern{mt_rand(0,35)}; //生成php隨機數
}
return $key;
}
echo randomkeys(8);
這個php隨機函數能生成XC*=z~7L這樣的字元串,隨機!
D. php生成隨機數,1-15之間,2出現的概率是80% 然後其它數字出現的概率是10%
$rand = 0; // 定義rank隨機變數
if(mt_rand(1,100) <= 80) { // 控制2出現的概率為80%
$rand = 2;
} else { // 剩餘數字的概率為20%
$rand = mt_rand(2,15); // 排除掉2號位置,用1去補2號位
if($rand == 2) { // 當隨機到2號位,則用1去補2號
$rand = 1;
}
}
echo $rand; // 輸出結果
http://w3school.com.cn/php/func_math_mt_srand.asp
E. php程序如何產生隨機數
$i = rand(10,100000);隨機產生10到100000之間的一個數字
<?php
echo "<table><tr>";
for($i=0;$i<20;$i++)
{
echo "<td>",rand(10,100000),"</td>";
if($i==9)
{
echo "</tr><tr>";
}
}
echo "</tr></table>";
?>
F. php生成不等於某數的隨機數
例1,使用shuffle函數生成隨機數。
1 <?php
2 $arr=range(1,10);
3 shuffle($arr);
4 foreach($arr as $values)
5 {
6 echo $values." ";
7 }
8 ?>
例2,使用array_unique函數生成隨機數。
1 <?php
2 $arr=array();
3 while(count($arr)<10)
4 {
5 $arr[]=rand(1,10);
6 $arr=array_unique($arr);
7 }
8 echo implode(" ",$arr);
9 ?>
例3,使用array_flip函數生成隨機數,可以去掉重復值。
01 <?php
02 $arr=array();
03 $count1=0;
04 $count = 0;
05 $return = array();
06 while ($count < 10)
07 {
08 $return[] = mt_rand(1, 10);
09 $return = array_flip(array_flip($return));
10 $count = count($return);
11 } //www.jbxue.com
12 foreach($return as $value)
13 {
14 echo $value." ";
15 }
16 echo "<br/>";
17 $arr=array_values($return);// 獲得數組的值
18 foreach($arr as $key)
19 echo $key." ";
20 ?>
php隨機數生成函數示例
01 <?php
02 function randpw($len=8,$format='ALL'){
03 $is_abc = $is_numer = 0;
04 $password = $tmp ='';
05 switch($format){
06 case 'ALL':
07 $chars='';
08 break;
09 case 'CHAR':
10 $chars='';
11 break;
12 case 'NUMBER':
13 $chars='0123456789';
14 break;
15 default :
16 $chars='';
17 break;
18 } // www.jbxue.com
19 mt_srand((double)microtime()*1000000*getmypid());
20 while(strlen($password)<$len){
21 $tmp =substr($chars,(mt_rand()%strlen($chars)),1);
22 if(($is_numer <> 1 && is_numeric($tmp) && $tmp > 0 )|| $format == 'CHAR'){
23 $is_numer = 1;
24 }
25 if(($is_abc <> 1 && preg_match('/[a-zA-Z]/',$tmp)) || $format == 'NUMBER'){
26 $is_abc = 1;
27 }
28 $password.= $tmp;
29 }
30 if($is_numer <> 1 || $is_abc <> 1 || empty($password) ){
31 $password = randpw($len,$format);
32 }
33 return $password;
34 }
35 for($i = 0 ; $i < 10; $i++){
36 echo randpw(8,'NUMBER');
37 echo "<br>";
38 }
G. PHP生成隨機數的幾種方法
PHP生成隨機數的幾種方法
第一種方法使用mt_rand()函數生成隨機數,示例代碼如下:
function GetRandStr($length){
$str='';
$len=strlen($str)-1;
$randstr='';
for($i=0;$i<$length;$i++){
$num=mt_rand(0,$len);
$randstr .= $str[$num];
}
return $randstr;
$number=GetRandStr(6);
echo $number;
第二種方法使用array_rand()和md5函數生成隨機字元串,代碼如下:
function make_password( $length = 8 ) { // 密碼字元集,可任意添加你需要的字元 $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',', '.', ';', ':', '/', '?', '|'); // 在 $chars 中隨機取 $length 個數組元素鍵名 $keys = array_rand($chars, $length); $password = ''; for($i = 0; $i < $length; $i++) { // 將 $length 個數組元素連接成字元串 $password .= $chars[$keys[$i]]; } return $password; }
第三種方法取當前時間戳,代碼示例為:
function get_password( $length = 8 ) { $str = substr(md5(time()), 0, $length);//md5加密,time()當前時間戳 return $str; }
第四種方法使用str_shuffle()函數打亂字元串,生成隨機字元串,代碼如下:
function getrandstr(){ $str=''; $randStr = str_shuffle($str);//打亂字元串 $rands= substr($randStr,0,6);//substr(string,start,length);返回字元串的一部分 return $rands; }
第五種方法生成四位隨機驗證碼,代碼如下:
$code = rand(10000, 99999);
比較mt_rand()生成0~1隨機小數的效果與lcg_value()方法:
兩種方法進行執行時間比較,lcg_value()執行時間大約快3倍。
兩種方法進行隨機效果比較,生成的圖像效果對比。