
在 PHP 中,生成随机数是很多场景必需的操作,比如验证码、唯一 ID、密码生成、抽奖等。下面是 PHP 生成随机数的 5 种实用方案,涵盖整数、浮点、字符串、密码、加密场景。
✅ 方案一:rand()
– 最基本的随机整数函数(非加密)
$random = rand(1, 100); // 生成 1 到 100 之间的随机整数
- PHP 7.1 之前常用(从 PHP 7.1 起推荐用
random_int()
) - 不适合加密或安全性要求高的场景
✅ 方案二:mt_rand()
– 更快的随机数生成器
$random = mt_rand(1000, 9999); // 生成 4 位随机数
- 基于 Mersenne Twister 算法
- 比
rand()
更快且更均匀
✅ 推荐:非安全性场景使用,如订单号、验证码等
✅ 方案三:random_int()
– 密码学安全级别(PHP 7+)
$secure = random_int(1, 1000000);
- 使用系统加密安全源(如
/dev/urandom
) - 更适合密码生成、Token、验证码、安全ID等
🚨 建议用于对安全性有要求的应用
✅ 方案四:随机字符串/密码生成(字母 + 数字)
function randomString($length = 8) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $chars[random_int(0, strlen($chars) - 1)];
}
return $str;
}
echo randomString(12); // 例如:X9aFq21KsUi8
- 可以定制字符集
- 适合验证码、临时密码、邀请码等
✅ 方案五:openssl_random_pseudo_bytes()
生成随机字节流(适用于 Token)
$bytes = openssl_random_pseudo_bytes(16);
$token = bin2hex($bytes); // 转为 32 位十六进制字符串
echo $token; // 例如:3f5a72eab1cc4832d90a45f9e44b2b8e
- 密码学安全级别
- 常用于生成 API Token、Session ID 等唯一标识
📊 附加:生成随机浮点数(自定义)
function randomFloat($min = 0, $max = 1) {
return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}
echo randomFloat(1.5, 9.9);
🧠 总结推荐表
函数/方法 | 特点 | 用途推荐 |
---|---|---|
rand(min, max) | 最基础,不太安全 | 简单脚本、教学 |
mt_rand(min, max) | 更快更好 | 一般用途(验证码、订单号) |
random_int(min, max) | 密码学安全,推荐 | 登录验证码、授权码、安全ID |
randomString() 自定义函数 | 可控制字符 | 临时密码、邀请码 |
openssl_random_pseudo_bytes() | 生成随机字节流(高安全) | API 密钥、Token、Session 等 |