rand

(PHP 4, PHP 5, PHP 7, PHP 8)

rand生成一个随机整数

描述

rand(): int
rand(int $min, int $max): int

如果在不带可选参数 minmax 的情况下调用,rand() 返回一个介于 0 到 getrandmax() 之间的伪随机整数。例如,如果您想要一个介于 5 和 15(包含)之间的随机数,请使用 rand(5, 15)

注意

此函数不会生成加密安全的随机值,不应用于加密目的或需要返回值不可猜测的用途。

如果需要加密安全的随机性,可以使用 Random\Randomizer 类,并使用 Random\Engine\Secure 引擎。对于简单用例,random_int()random_bytes() 函数提供了一个方便且安全的 API,它由操作系统的 CSPRNG 支持。

注意: 在某些平台(如 Windows)上,getrandmax() 仅为 32767。如果您需要大于 32767 的范围,指定 minmax 将允许您创建大于此范围,或者考虑使用 mt_rand() 替代。

注意: 自 PHP 7.1.0 起,rand() 使用与 mt_rand() 相同的随机数生成器。为了保持向后兼容性,rand() 允许 max 小于 min,而不是像 mt_rand() 那样返回 false

参数

min

要返回的最低值(默认值:0)

max

要返回的最高值(默认值:getrandmax()

返回值

介于 min(或 0)和 max(或 getrandmax(),包含)之间的伪随机值。

变更日志

版本 描述
7.2.0 rand() 已修复 模数偏差错误。这意味着使用特定种子生成的序列可能与 64 位机器上的 PHP 7.1 不同。
7.1.0 rand() 已成为 mt_rand() 的别名。

示例

示例 #1 rand() 示例

<?php
echo rand(), "\n";
echo
rand(), "\n";

echo
rand(5, 15), "\n";
?>

上面的示例将输出类似以下内容

7771
22264
11

注释

警告

min max 范围必须在 getrandmax() 范围内。即 (max - min) <= getrandmax() 否则,rand() 可能会返回质量较差的随机数。

参见

添加注释

用户贡献的注释 4 个注释

3
relsqui at armory dot com
19 年前
不要忘记,当您需要小于某个 2 的幂的随机数时,使用按位运算更快。例如,

<?php
rand
()&1;
// 而不是
rand(0,1);
// 用于生成 0 或 1,

rand()&3;
// 而不是
rand(0,3);
// 用于生成 0、1、2 或 3,

rand()&7;
// 而不是
rand(0,7)
// 用于生成 0、1、2、3、4、5、6 或 7,
?>

等等。您所做的一切只是生成一个默认的随机数(因此 PHP 不必解析任何参数),然后切断对您有用的部分(使用按位运算,这比基本的数学运算都要快)。
-3
play dot it at play-it dot net
1 年前
这是一个简单的 base64 随机字符串函数

<?php
function random_string($length) {
$str = random_bytes($length);
$str = base64_encode($str);
$str = str_replace(["+", "/", "="], "", $str);
$str = substr($str, 0, $length);
return
$str;
}

/*
random_string(32) 的示例输出

OP0vOJEsSvr6wbgN4jIwqMMstlpMSUsl
2IHaIxD2W4VTKZuzioudbpQCALdl6Ym6
QY0eZ3QYy3OKKN6ttzbDwAwsAfkXfQ2f
jznjlPCUDbYzOTJysPP414BbdVNu4jmT
GlktgJ8JUhdH5MfQ1PHl0wnqXQlKggQs
Pb9WALM3KcGCCPBKXsPgNfy3M0Xj4aEu
AED6OTVl8aBbspdxoXvA1sT4ein8lruH
9cSbz4FhoI4qSsPZFMh0u1rWDDEgQxI2
iSBlT4K7Ad516qPXgPReSj2tii7TAK5b
DuX8HByMb2e8IdM4j49Td2JTI9Ki7o1C
*/
?>
-8
匿名
3 年前
请注意,版本 7.1.0 中的算法更改破坏了使用给定值初始化的随机序列的可重复性。例如,如果您有一个像这样的程序

<?php
srand
($argv[1]);
for (
$i = 0; $i < 10; $i++) {
echo
rand().PHP_EOL;
}
?>

在版本 7.1.0 之后,它将不再产生相同的结果。这对某些类型的模拟非常重要。希望您一直以来都在使用 mt_rand() 或更好的东西,否则如果您想让您的程序能够重复模拟 7.1.0 之前的日子,您将需要进行一些挖掘... 您需要查看 PHP 源代码档案以发现他们以前使用的算法,并在您的程序中复制它。
-15
匿名
14 年前
生成一个随机的 5 个字符的 A-Z0-9 字符串

<?php
for ($i=0; $i<6; $i++) {
$d=rand(1,30)%2;
echo
$d ? chr(rand(65,90)) : chr(rand(48,57));
}
?>

# php -r 'for ($i=0; $i<6; $i++) { $d=rand(1,30)%2; echo $d ? chr(rand(65,90)) : chr(rand(48,57)); } echo "\n";'
14BW1A
To Top