PHP实现自定义随机函数:生成刷新可变6位随机数及返回多随机数
PHP两类随机数函数实现方案
1. 返回50个随机数的函数
实现说明:采用PHP 7.0+内置的random_int()函数生成随机数,相比rand()、mt_rand()安全性更高,生成的随机数符合密码学安全标准。
function getFiftyRandomNumbers(int $min = 1, int $max = 100): array { $result = []; for ($i = 0; $i < 50; $i++) { // 生成指定范围内的随机数加入结果数组 $result[] = random_int($min, $max); } return $result; } // 调用示例 $randomArr = getFiftyRandomNumbers(1, 100); print_r($randomArr);
如果需要生成不重复的50个随机数,只需在循环内新增判断:生成的数值未存在于结果数组中时才存入即可。
2. 不使用rand/mt_rand等预定义随机函数的6位随机数生成函数
实现说明:完全不调用PHP内置的随机数生成函数,依赖微秒级时间戳、当前请求进程ID、客户端IP三个维度的唯一值组合,保证每次页面刷新生成的结果唯一,同时固定为6位数字。
function getSixDigitsUniqueNumber(): string { // 取微秒级时间戳,保证每次刷新取值不同 $timePart = microtime(true); // 取当前PHP进程ID,增加区分度 $processPart = getmypid(); // 取客户端IP,不同用户取值不同 $ipPart = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1'; // 拼接后做哈希处理,转成数字 $hash = md5($timePart . $processPart . $ipPart); // 把哈希的16进制片段转成10进制,取模得到0-999999的数字 $num = hexdec(substr($hash, 0, 8)) % 1000000; // 补前导零,保证固定6位 return str_pad($num, 6, '0', STR_PAD_LEFT); } // 调用示例 $uniqueNum = getSixDigitsUniqueNumber(); echo $uniqueNum;
实现验证:因为microtime(true)的精度是微秒级,正常页面刷新的时间间隔远大于1微秒,所以每次调用的$timePart取值都不相同,最终生成的6位数字也不会重复。
内容的提问来源于stack exchange,提问作者Praff
相关产品推荐
相关产品推荐

