在 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 等