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倍。
两种方法进行随机效果比较,生成的图像效果对比。