PHP 生成大量随机不重复编码

PHP · 05-31

之前,使用in_array(),进行逐个查重,数组长度1万以上,而且每次随机码都会查询,效率比较低。
下面是优化之后的一个结果。

<?php
function genRandomString($len, $chars)
{
    $charsLen = count($chars) - 1;
    // 将数组打乱
    shuffle($chars);
    $output = "";
    for ($i = 0; $i < $len; $i++) {
        $output .= $chars[mt_rand(0, $charsLen)];
    }
    return $output;
}

// 生成指定数量随机码
$i = 0;
$codeLen = 6; // 随机码长度
$codeArr = [];
$randBase = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
$code_number = 100000; 
$time = microtime(true)*1000;
while (true) {
    $randCode = genRandomString($codeLen, $randBase);
    $codeArr[] = $randCode;
    $i++;
    if($i >= $code_number){
        $codeArr = array_unique($codeArr);
        $i = $count = count($codeArr);
        if($count  >= $code_number){
            break;
        }
    }
}
echo round(microtime(true)*1000-$time,2).'毫秒';
?>

https://onlinephp.io/

Theme Jasmine by Kent Liao