php 8 中推荐使用 random_int() 生成安全随机整数,它基于 csprng,适用于密码、令牌等场景;random_int(min, max) 要求 min ≤ max,否则抛出 exception,不支持浮点数。

PHP 8 中推荐使用 random_int() 函数生成指定范围的**安全随机整数**,它基于加密安全的随机数生成器(CSPRNG),比旧的 rand() 或 mt_rand() 更可靠,尤其适合密码、令牌、抽奖等对安全性有要求的场景。
使用 random_int() 生成安全随机整数
random_int(min, max) 直接返回一个介于 min 和 max 之间(含边界) 的随机整数。参数必须为整数,且 min ≤ max,否则会抛出 Exception。
- ✅ 正确示例:
random_int(1, 100)—— 生成 1 到 100 之间的随机整数(含 1 和 100) - ❌ 错误调用:
random_int(10, 1)—— 抛出ValueError - ⚠️ 注意:不能用于生成浮点数;如需小数,需另行处理(见下文)
生成指定范围的随机浮点数
random_int() 不支持浮点,但可通过缩放+除法间接实现。例如生成 [0.0, 1.0) 区间内的随机小数:
-
$float = random_int(0, 999999) / 1000000.0;—— 精度到小数点后 6 位 - 生成 [a, b) 区间的浮点数:
$float = $a + (random_int(0, 999999) / 1000000.0) * ($b - $a); - 若只需简单近似且安全性要求不高,也可用
lcg_value()(但不推荐用于关键逻辑)
兼容性与错误处理建议
random_int() 自 PHP 7.0 起内置,PHP 8 完全支持。运行时可能因系统熵池不足而抛出 Exception(极罕见),建议包裹 try-catch:
try { $n = random_int(1, 10); } catch (Exception $e) { /* 记录日志或降级处理 */ }- 避免在循环中频繁调用而不加防护,正常 Web 场景下无需担心性能问题
- 不要用
rand()或mt_rand()替代——它们不具备密码学安全性,且 PHP 8.2+ 已将rand()标记为废弃
不推荐的旧方法(仅作对比)
(PHP 8 中应避免)
-
rand(1, 100)—— 已废弃,行为不可预测,不安全 -
mt_rand(1, 100)—— 性能好但非加密安全,仅适用于游戏、动画等非敏感场景 -
intval(rand() * 100)—— 写法错误,rand()无参调用已废弃,且结果不可控
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











