我知道uniqid()创建大量长度为 7 或更长的唯一 id 的方法,但我想要创建的是长度为 5 的唯一 id,不会发生冲突。
是否可以创建 220.000 个长度为 5 的唯一 id 并检查是否存在冲突?
你可以试试
for($i = 0; $i < 10 ; $i++)
{
echo randString(5),PHP_EOL ;
}
Run Code Online (Sandbox Code Playgroud)
输出
7fh96
G93fd
97Q7E
90Wku
7Vby9
4678f
S11oe
67688
19D36
KC1bQ
Run Code Online (Sandbox Code Playgroud)
简单碰撞测试
$hash = array();
$collision = 0;
while ( count($hash) < 220000 ) {
$r = randString(5);
if (isset($hash[$r])) {
$collision ++;
continue;
}
$hash[$r] = 1;
}
print(($collision / 220000) * 100 . "% - ($collision)");
Run Code Online (Sandbox Code Playgroud)
经过 100,000 次测试,冲突始终小于 0.02,这使得该函数对于 5 字符集有效
0.011818181818182% - (26)
Run Code Online (Sandbox Code Playgroud)
使用的功能
function randString($length) {
$char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$char = str_shuffle($char);
for($i = 0, $rand = '', $l = strlen($char) - 1; $i < $length; $i ++) {
$rand .= $char{mt_rand(0, $l)};
}
return $rand;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11447 次 |
| 最近记录: |