2012-01-05 22 views
4

PHPの乱数は予測可能ですか?そうであれば、1から32の範囲の乱数を予測することはどれくらい難しいでしょうか?予測不能にする方法はありますか?PHP mt_rand()関数

<?php 
function rand_best($min, $max) { 
    $generated = array(); 
    for ($i = 0; $i < 100; $i++) { 
     $generated[] = mt_rand($min, $max); 
    } 
    shuffle($generated); 
    $position = mt_rand(0, 99); 
    return $generated[$position]; 
} 
?> 
+3

のために何かを書いているのでない限り、私はあなたが 'mt_randを()'を使用しているので、あなたは[メルセンヌツイスター]上に読むべき十分以上のものですランド関数を言うと思います(http: //en.wikipedia.org/wiki/Mersenne_twister)アルゴリズムがどのように動作しているか知りたい場合は、 – DaveRandom

+1

さらに、 'mt_rand()'は 'rand()'(特に欠陥があります)よりも優れた品質を提供します。あなたが種を知らないならば、次の数字を予測することはできません。 –

答えて

6

プログラミングでランダムなランダム関数がどのようになっているかについての議論は古くからあります。とにかくhttp://en.wikipedia.org/wiki/Random_number_generation

はこれを見てください。ランダム関数は、今日のように(私が何を呼び出すのか)、できるだけランダムに近いほど良いです。 1,32(またはそれ以外の数)の間で結果を予測する方法はありません。コンピュータがそのような操作を行うことができないので、数字は本当にランダムではないということです。

あなたはペンタゴン

+0

一部のコンピュータには、実際に乱数を生成するハードウェアデバイスがあります。 –

+1

それは本当です。私はこのページhttp://www.random.org/randomness/(読んでおくべきです)を読んだことがあります。彼らは本当にランダムなので、放射能源を使用しています。 – OptimusCrime

+0

最新のIntelプロセッサにはランダム生成特権命令があると思います。 –

2

(気をつけて、それをブロックすることができます)あなたが/dev/urandomであなたの擬似乱数生成器にシード(またはそのから読み取る)ことができ、Linuxシステムを想定し、または可能性/dev/random