PHP random_int() 函数

定义和用法

random_int() 函数生成一个加密安全的伪随机整数。该函数使用操作系统的随机数发生器(如 /dev/urandom 或 CryptGenRandom),适用于安全敏感场景(如令牌生成、密码重置链接、密钥生成等)。

提示:rand()mt_rand() 不同,random_int() 生成的随机数不可预测,适合加密安全用途。如果系统没有可用的随机源,函数会抛出 Random\RandomException(PHP 8.0 前为 Exception)。

语法

random_int(int $min, int $max): int
参数 描述
min 必需。规定返回的最小值(必须 ≤ max)。
max 必需。规定返回的最大值。

返回值

返回 minmax 之间(包含)的一个加密安全随机整数。

PHP 版本

  • PHP 7.0+ (random_int 函数引入)
  • PHP 8+ (异常类型改为 Random\RandomException)

示例

示例 1:基本用法

<?php
// 生成 1 到 100 之间的安全随机数
$secureRand = random_int(1, 100);
echo $secureRand;
?>

输出(示例):

42

示例 2:生成随机令牌(用于 CSRF 保护)

<?php
function generateToken($length = 32) {
    $token = '';
    for ($i = 0; $i < $length; $i++) {
        $token .= chr(random_int(33, 126)); // 可打印 ASCII 字符
    }
    return $token;
}

echo "CSRF 令牌: " . generateToken();
?>

输出(示例):

CSRF 令牌: 8K#mP@qR!tL2xYzA5bC7dEfG

示例 3:异常处理(当随机源不可用时)

<?php
try {
    $number = random_int(1, 10);
    echo "随机数: $number";
} catch (Random\RandomException $e) {
    echo "随机数生成失败: " . $e->getMessage();
}
?>

输出(正常情况下):

随机数: 7

相关函数

  • random_bytes() - 生成加密安全的随机字节
  • mt_rand() - 生成更好的随机数(非加密安全)
  • rand() - 生成随机整数(非加密安全)
  • lcg_value() - 线性同余随机数(非加密安全)

注意事项

重要:
  • random_int() 适用于加密安全场景,但性能比普通随机函数稍慢。对于非安全场景(如模拟、游戏),可以使用 mt_rand()
  • 如果系统无法生成足够的随机数据,函数会抛出 Random\RandomException(PHP 8.0+)或 Exception(PHP 7.x)。
  • 参数 minmax 必须是整数,且 minmax,否则会抛出错误。
  • 在 PHP 8.0+ 中,该函数位于 Random\Randomizer 类中,但作为全局函数仍然可用。