スクリプトで約5,000の乱数を生成する必要がありますが、CPUが非常に高速であるため、乱数に傾向が見られます。
たとえば、最初の100回の反復で、rand(0,100);を使用して70から99までの80の値を取得します。これは、非常に不便な場合があります。
そのような問題を解決する方法はありますか、それともランダム性は2012年にはもう達成できませんか?
乱数を実行する関数から乱数を生成する可能性があると思いますが...わかりません。
スクリプトで約5,000の乱数を生成する必要がありますが、CPUが非常に高速であるため、乱数に傾向が見られます。
たとえば、最初の100回の反復で、rand(0,100);を使用して70から99までの80の値を取得します。これは、非常に不便な場合があります。
そのような問題を解決する方法はありますか、それともランダム性は2012年にはもう達成できませんか?
乱数を実行する関数から乱数を生成する可能性があると思いますが...わかりません。
使用していrand()
ますか?「より良いランダム値を生成する」ことを検討してください。
補遺; コインの両面を見るのは常に良いことです。
rand
時間によってシードされます。 mt_rand
あなたのためにうまくいくかもしれません。さらに優れたランダム性が必要な場合は、openssl_random_pseudo_bytes
(利用可能な場合)を使用できます。または/dev/[u]random
、それにアクセスできず、利用可能なシステムを使用している場合も使用できます。これらを使用する場合は、hexdec(bin2hex())
10進数を取得するためにバイトを変換する必要があり、その後、おそらくそれらを切り捨てます。
mt_rand()は、rand()を改良したものです。ただし、乱数はシーケンスから生成されるため、...
この関数を使用します:
function Random($length = 210) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
210を任意の数に変更できます。これがお役に立てば幸いです。