uniqid()
長さ7以上のユニークIDをたくさん作成する方法は知っていますが、作成したいのは長さ5のユニークIDで衝突のないものです。
長さ 5 の 220.000 個の一意の ID を作成し、衝突があるかどうかを確認することは可能ですか?
あなたが試すことができます
for($i = 0; $i < 10 ; $i++)
{
echo randString(5),PHP_EOL ;
}
出力
7fh96
G93fd
97Q7E
90Wku
7Vby9
4678f
S11oe
67688
19D36
KC1bQ
簡単な衝突テスト
$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)");
100,000回テストされ、常に衝突は0.02未満であるため、5文字セットで機能が効率的になります。
0.011818181818182% - (26)
使用した機能
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;
}