2

uniqid()長さ7以上のユニークIDをたくさん作成する方法は知っていますが、作成したいのは長さ5のユニークIDで衝突のないものです。

長さ 5 の 220.000 個の一意の ID を作成し、衝突があるかどうかを確認することは可能ですか?

4

3 に答える 3

7

あなたが試すことができます

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;
}
于 2013-03-04T09:41:49.323 に答える