PHP 随机数

在任何语言中,我们都能看到随机数的身影,不例外,PHP也为我们实现了随机函数。本文将讲解获取随机数、获取随机小数,以及获取指定步长的随机数。

在PHP中,系统实现了rand()mt_rand()两种随机函数。两者之间的区别在于:rand()函数式libc中定义的随机函数的简单包装器,mt_rand()函数式则是非正式用来替换rand()的。而且,mt_rand()的速度要比rand()快上4倍。

1. 利用mt_rand()获取0-10的随机整数(未经处理的mt_rand()函数只能返回整数)

1
2
3
4
5
/**
* @param min 随机数最小值
* @param max 随机数最大值
*/
echo mt_rand(0, 10);

 

2. 利用mt_rand()获取小数随机数

1
2
3
4
5
6
7
8
9
10
11
/**
* frand函数作用:产生随机小数
* @param min 随机数最小值
* @param max 随机数最大值
* @param decimals 小数位数
* 其中,pow(x, y)函数为幂函数,返回x的y次
*/
function frand($min, $max, $decimals = 0) {
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}

 

3. 利用mt_rand()获取指定步长的随机数(如果需要3的倍数,那么步长就为3)

1
2
3
4
5
6
7
8
9
10
11
/**
* frand函数作用:产生指定步长的随机数
* @param min 随机数最小值
* @param max 随机数最大值
* @param precision 步长
*/
function frand($min, $max, $precision = 1) {
//TODO:检测$precision != 0;
$scale = 1 / $precision;
return mt_rand($min * $scale, $max * $scale) / $scale;
}

 

4. 利用mt_rand()获取字符串(可用于随机密码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* frand函数作用:产生随机密码
* @param min 密码最短值
* @param max 密码最长值
*/
function frand($min, $max) {
//列出所有字符和数字
$validChars = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890';
//获得字串长度,避免获取随机数时溢出
$maxChar = strlen($validChars - 1);
//获得密码随机长度
$length = mt_rand($min, $max);
$password = '';
//循环获得每一位密码
for($i = 0; $i < $length; $i++) {
$password .= $validChars[mt_rand(0, $maxChar)];
}
return $password;
}

参考资料:

《PHP5范例代码查询词典 Lee Babin等著》

http://www.jb51.net/article/32836.htm