PHP随机数生成的几种方法
Posted by 撒得一地 on 2016年7月16日 in PHP笔记
上一篇: PHP Trait 特性的作用
下一篇: PHP ob_clean()
下一篇: PHP ob_clean()
在PHP开发中,有一些情况下可能要使用PHP生成随机数,PHP随机数的生成方法有很多。下面介绍常用的几种随机数的生成方法。
1.使用PHP内置函数生成随机数
使用PHP的内置函数可以自由的生成随机数,常见的函数有 mt_rand() 和 rand(),下面分别看下这两个函数的语法:
rand()函数语法
rand(min,max)
参数
min,max这两个参数可以省略。
说明
如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机整数。例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
某些平台下(例如 Windows)RAND_MAX 只有 32768。如果需要的范围大于 32768,那么指定 min 和 max 参数就可以生成大于 RAND_MAX 的数了,或者考虑用 mt_rand() 来替代它。
实例:
<?php //生成随机数 echo rand(); //生成1-100内某个随机数 echo rand(1,100); ?>
mt_rand()函数语法
mt_rand(min,max)
说明
如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。
实例:
<?php echo mt_rand(); echo "<br/>"; echo mt_rand(100,200); ?>
输出:
13139999
49
两个函数比较:mt_rand() 比rand() 快四倍 。
2.自定义函数生成指定长度的含数字、字母随机数(串)
/** * 产生随机字符串 * * @param int $length 输出长度 * @param string $chars 可选的 ,默认为 0123456789abcdefghijklmnopqrstuvwxyz * @return string 字符串 */ function random($length, $chars = '0123456789abcdefghijklmnopqrstuvwxyz') { $hash = ''; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; }
3.生成更复杂的随机字符串,字符包括^、#、%等特殊字符
function randomkeys($length){ $output=''; for($a=0;$a<$length; $a++){ $output.=chr(mt_rand(33, 126)); } return $output; } echo randomkeys(20); /* 类似输出:EGztLufY\Eq/br{y!;>P */
或者,使用下面这种方法生成随机字符串:
function keygen() { $tempstring = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO PQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABC DEFGHIJKLMNOPQRSTUVWXYZ!?@#$%&*[]{}();:,<>~+=-_ /|\\"; for($length = 0; $length < mt_rand(10, 15); $length++) { $temp = str_shuffle($tempstring); $char = mt_rand(0, strlen($temp)); $pass .= $temp[$char]; } return $pass; }
上面的这两种方法,都可以生成复杂的随机字符串,这些复杂的字符串还可以用做密码的使用等特殊用途。
4.生成一个随机的 6 个字符的十六进制字符串
<?php // generate a random number between 0 and 0xffffff //生成0到0xffffff的一个随机数 $rand = mt_rand(0x000000, 0xffffff); // make sure we're not over 0xffffff, which shouldn't happen anyway $rand = dechex($rand & 0xffffff); // add zeroes in front of the generated string //如果有0确保0在首位 $rand = str_pad($rand, 6, '0', STR_PAD_LEFT); echo $rand; ?>
类似输出:
8514d2
3188ae
028f3e
5.在连续的整数区间内,生成指定个数而且互不相同的随机数
function random_number_array($count, $from, $to){ for($i=$from;$i<$to;$i++){ $number_array[] = $i; } $random_number_array = array(); mt_srand ((double) microtime() * 1000000); for($i=0;$i<$count;$i++){ $random_number = mt_rand(0,count($number_array)-1); $key_to_insert_and_delete = array_search($random_number, $number_array); $random_number_array[$i] = $number_array[$key_to_insert_and_delete]; array_splice($number_array, $key_to_insert_and_delete, 1); } // Array $random_number_array with $count random Numbers, between $from and $to return $random_number_array; } print_r(random_number_array(10,1,100));
可能输出:
Array ( [0] => 17 [1] => 40 [2] => 72 [3] => 91 [4] => 36 [5] => 14 [6] => 1 [7] => 62 [8] => 47 [9] => 65 )
6.在一个指定范围内生成随机浮点数
function random_float ($min,$max) { return ($min+lcg_value()*(abs($max-$min))); } echo random_float(1,10);
上一篇: PHP Trait 特性的作用
下一篇: PHP ob_clean()
下一篇: PHP ob_clean()