2

スクリプトで約5,000の乱数を生成する必要がありますが、CPUが非常に高速であるため、乱数に傾向が見られます。

たとえば、最初の100回の反復で、rand(0,100);を使用して70から99までの80の値を取得します。これは、非常に不便な場合があります。

そのような問題を解決する方法はありますか、それともランダム性は2012年にはもう達成できませんか?

乱数を実行する関数から乱数を生成する可能性があると思いますが...わかりません。

4

4 に答える 4

5

使用していrand()ますか?「より良いランダム値を生成する」ことを検討してください。

補遺; コインの両面を見るのは常に良いことです。

于 2012-05-10T04:25:35.837 に答える
1

rand時間によってシードされます。 mt_randあなたのためにうまくいくかもしれません。さらに優れたランダム性が必要な場合は、openssl_random_pseudo_bytes(利用可能な場合)を使用できます。または/dev/[u]random、それにアクセスできず、利用可能なシステムを使用している場合も使用できます。これらを使用する場合は、hexdec(bin2hex())10進数を取得するためにバイトを変換する必要があり、その後、おそらくそれらを切り捨てます。

于 2012-05-10T04:27:32.243 に答える
0

mt_rand()は、rand()を改良したものです。ただし、乱数はシーケンスから生成されるため、...

于 2012-05-10T04:26:29.297 に答える
0

この関数を使用します:

function Random($length = 210) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}

210を任意の数に変更できます。これがお役に立てば幸いです。

于 2013-10-25T22:39:17.077 に答える