在网站功能建设中,php随机数是常用的一个功能,比如用户注册时随机产生的验证码、又比如
用户注册时生成随机的一组密码后可自行修改,当用户需要重置密码的时候也需要生成一个随机的密码······随机数就根据特定的规则(或在一个数组范围内)所自动产生的字符串,在php开发中应用广泛,不过php中的随机数也分好几种不同的情况,首先来认识一下PHP提供的随机数函数rand()。
PHP的rand()函数将返回随机整数,具体使用方法如下:
rand(min,max)
可选参数min和max可以使rand() 返回0到RAND_MAX之间的伪随机整数。例如,想要5到15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
下面我来看一个具体的示例,我们做一个基本的函数调用,不设置具体的参数,我们得到的随机数将不受min和max两个参数的限制。
echo(rand());?>
得到的结果: (随机结果)

使用PHP生成指定区间内的随机数
echo(rand(1000,2000));?>
够简单吧,下面来点稍微有些难度的。在本文的开始我们说过,随机数的作用很大,我们可以用PHP随机数解决一些复杂的问题。
使用PHP获得一个集合中的随机元素
将设我们需要从一个数组中获得一个随机元素
$my_array=array('ASP','PHP','JAVASCRIPT','AJAX','CSS','JQUERY','HTML'); echo($my_array[rand(0,6)]); ?>
$my_array=array('ASP','PHP','JAVASCRIPT','AJAX','CSS','JQUERY','HTML'); $repetition=rand(0,6); for($i=0;$i<=$repetition;$i++){ echo('I am learning ' . $my_array[rand(0,6)]); echo(' on w3cschool.cn'); } ?>
我们得到的结果可能像下面这样:

第一次运行我们得到三条结果
由于我们使用一个随机数限定显示的条数,所以得到的结果除了文章随机,显示的条数也是随机的,如下图:

第二次运行得到七条结果
接下来是一些php随机数的其他应用方法。
PHP生成32位随机数
使用token的方式,可以控制用户在这个时间内的权限,代码如下:
function genToken( $len = 32, $md5 = true ) { # Seed random number generator # Only needed for PHP versions prior to 4.2 mt_srand( (double)microtime()* ); # Array of characters, adjust as desired $chars = array( 'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`', 'S', '-', 'N', '<', 'D', '{', '}', '[', ']', 'h', ';', 'W', '.', '/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a', 'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')', '?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n', '=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T', 'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*' ); # Array indice friendly number of chars; $numChars = count($chars) - 1; $token = ''; # Create random token at the specified length for ( $i=0; $i<$len; $i++ ) $token .= $chars[ mt_rand(0, $numChars) ]; # Should token be run through md5? if ( $md5 ) { # Number of 32 char chunks $chunks = ceil( strlen($token) / 32 ); $md5token = ''; # Run each chunk through md5 for ( $i=1; $i<=$chunks; $i++ ) $md5token .= md5( substr($token, $i * 32 - 32, 32) ); # Trim the token $token = substr($md5token, 0, $len); } return $token; }

php生成N个不重复的随机数
示例代码:
运行结果: 2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24
若不进行此步骤,可能在删除重复值时造成键名不连续,不利于遍历。
用php成n个随机数,要求n个数的和等于100
$rand_array = array();function get_rand_n($rand_array) { $rand_number = mt_rand(1,9); if(empty($rand_array)) { $rand_array[] = $rand_number; return get_rand_n($rand_array); } else { $count = 0; foreach($rand_array as $item) { $count += $item; } if($count<100) { if($count+$rand_number == 100) { $rand_array[] = $rand_number; return $rand_array; } else if($count+$rand_number < 100) { $rand_array[] = $rand_number; return get_rand_n($rand_array); // 回掉再次计算 } else { // 如果得到的值大于了100 return get_rand_n($rand_array); // 重新获得随机数,知道为100的时候返回这个随机数数组 } } } } $rand_array = get_rand_n($rand_array); var_dump($rand_array);
运行结果:

php获取四位字母和数字的随机数
我们知道在php中简单的四位数的纯数字验证可以用rand(1000,9999)就可以了,但如果我们要得到字母和数字的随机四位数,那我们该如何写函数呢?下面是一个完整的实例。
如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 0 到 46(包括 0 和 46)之间的随机数,用 mt_rand(0, 46)。

php生成指定长度的随机数
"; echo get_random(3); echo "
"; echo get_random2(6);
php生成随机密码的三种方法
方法一:
1、在 33 – 126 中生成一个随机整数,如 35,
2、将 35 转换成对应的ASCII码字符 #
function create_password($pw_length = 8){ $randpwd = '';for ($i = 0; $i < $pw_length; $i++) { $randpwd .= chr(mt_rand(33, 126)); }return $randpwd; }// 调用该函数,传递长度参数$pw_length = 6echo create_password(6);
方法二:
function generate_password( $length = 8 ) {// 密码字符集,可任意添加你需要的字符$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; $password = '';for ( $i = 0; $i < $length; $i++ ) {// 这里提供两种字符获取方式// 第一种是使用 substr 截取$chars中的任意一位字符;// 第二种是取字符数组 $chars 的任意元素// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);$password .= $chars[ mt_rand(0, strlen($chars) - 1) ]; }return $password; }
方法三:
1、预置一个的字符数组 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符
2、通过array_rand()从数组 $chars 中随机选出 $length 个元素
3、根据已获取的键名数组 $keys,从数组 $chars 取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。
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 = ($chars, $length); $password = '';for($i = 0; $i < $length; $i++) {// 将 $length 个数组元素连接成字符串$password .= $chars[$keys[$i]]; }return $password; }
时间效率对比
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229283.html原文链接:https://javaforall.net
