PHP8中生成随机数字需按安全等级选函数:普通场景用mt_rand(),安全场景必须用random_int();前者快且均匀但不加密安全,后者调用系统加密源、不可预测,适用于密钥、Token等。

PHP8中生成随机数字,关键不是“怎么生成”,而是“为什么生成”——不同用途必须匹配对应安全等级的函数。普通场景用 mt_rand(),安全场景必须用 random_int(),没有中间选项。
日常使用:mt_rand() 是主力
适合抽奖、分页排序、测试数据等不涉及敏感信息的场景。它基于梅森旋转算法,速度快、分布均匀,比老版 rand() 更可靠。
- 语法简单:
mt_rand(1, 100)返回 1 到 100 的整数(含两端) - 不支持浮点数,如需小数可配合除法:
mt_rand(0, 999) / 1000 - 不能用于密码、Token、验证码等——它不是加密安全的
安全敏感:random_int() 是唯一选择
生成 API 密钥、重置链接、会话 ID、支付令牌时,必须用这个。它直接调用操作系统的加密随机源(如 /dev/urandom 或 Windows CNG),结果不可预测、不可重现。
- 语法一致:
random_int(1000, 9999)生成安全的 4 位数字 - 可能抛出异常,必须用 try-catch 包裹
- 性能略低是合理代价,安全不能妥协
生成多位不重复数字(如4位验证码)
不要靠多次调用 random_int() 碰运气,也不要用 shuffle() 后截取——首位为 0 会导致非法数字。
立即学习“PHP免费学习笔记(深入)”;
- 准备数字数组:
$digits = range(0, 9) - 用
array_rand($digits, 4)随机取 4 个键 - 检查选出的第一个数字是否为 0,是则重试或替换
- 拼接成字符串,确保是合法的 4 位数(1000–9999)
需要随机字符串(含数字)时
比如激活码、短链接 ID,应避免拼接 mt_rand() 和字母表——偏差风险高。
- 定义字符集:
$chars = '0123456789abcdefghijklmnopqrstuvwxyz' - 用
random_int(0, strlen($chars) - 1)安全取索引 - 循环拼接,长度可控,字符分布均匀
- 纯数字字符串同理,只需把字符集限定为
'0123456789'



















