• 締切済み

文字列から乱数を作る方法について。

最近PHPの勉強をしており、文字列をhash関数の入力として用いて、0~100の乱数を生成する機能を実装しました。 ですが、出力結果に偏りがみられます。 再現性を残して、できるだけ偏りの無い乱数を作りたいと考えています。 何かいいアイデアやサイトを御存知でしたら教えてください。 現在は以下のようなコードで乱数を生成しています。 $seed = hash("sha512",$setstring); $seed = $seed[0].$seed[1].$seed[2]; $seed = intval($seed,10); srand($seed); for($i=0; $i<10; $i++){ $lv = rand()%100; }

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> $seed = hash("sha512",$setstring); ハッシュを16進数の文字列にしたものが返ります。 その先頭3文字を使うので、そもそも 16x16x16 = 2^12通りにしかなりません。 加えて >$seed = intval($seed,10); で10進数の文字列として数値化しようとするので、半分近くが 0 になりますし、そうでない物も低めに偏ります。 (最初の文字がa~fの場合、結果は0です) (2文字目がa~fなら一文字目だけが数値化されるので0~9になります) 種が偏っているので、それから作られる乱数も偏ります

関連するQ&A