ああ、なるほどその目的ならばseedを設定しないと役に立たないですね。
>>具体的にはどういう値でしょうか?
>入力された文字をMD5でハッシュを出し、その中から英字を取り除いた物を使っています。
>例
>8030273364438475050
>787376380711342160108
>52704194757033429714311
マニュアルを見ると、mt_srandの引数は int を取ると記述されています。
よくある32bit環境ではint の最大値は 2^31-1 (2147483647)ですが
上記の例ではいずれもこの最大値を越えています。
んで、ちょっと次のようなスクリプトを書いて確かめてみたところ
<?php
<?php
$ary = array(
8030273364438475050,
787376380711342160108,
52704194757033429714311,
pow(2,8), pow(2,16), pow(2,24), pow(2,31),
pow(2,32)-1,
pow(2,32),
pow(2,32)+1,
pow(2,36),
pow(2,36)+pow(2,4),
pow(2,36)+pow(2,8),
pow(2,36)+pow(2,16),
pow(2,40));
print("start\n");
//print_r($ary);
foreach ($ary as $v) {
print("$v =>\n");
mt_srand($v);
for ($count=0; $count<=20; $count++) {
print(mt_rand(1, 100));
print(", ");
}
print("\n");
}
start
8.0302733644385E+18 =>
85, 23, 51, 8, 20, 60, 33, 25, 53, 50, 98, 21, 45, 9, 28, 38, 4, 25, 70, 25, 35,
7.8737638071134E+20 =>
45, 60, 72, 16, 61, 86, 55, 85, 43, 63, 36, 62, 56, 30, 11, 6, 4, 74, 62, 48, 80,
5.2704194757033E+22 =>
45, 60, 72, 16, 61, 86, 55, 85, 43, 63, 36, 62, 56, 30, 11, 6, 4, 74, 62, 48, 80,
256 =>
96, 84, 41, 53, 80, 51, 92, 32, 97, 98, 41, 36, 62, 14, 6, 43, 20, 94, 38, 23, 38,
65536 =>
85, 59, 62, 82, 50, 66, 62, 34, 52, 28, 24, 81, 86, 24, 71, 86, 92, 55, 36, 29,44,
16777216 =>
20, 10, 51, 81, 92, 16, 53, 28, 1, 51, 80, 19, 26, 19, 27, 30, 65, 33, 61, 30, 60,
2147483648 =>
85, 67, 18, 37, 78, 85, 55, 60, 67, 58, 71, 31, 59, 96, 53, 85, 98, 28, 32, 60,17,
4294967295 =>
10, 89, 92, 44, 22, 47, 79, 78, 2, 29, 3, 51, 60, 30, 86, 70, 91, 84, 56, 66, 99,
4294967296 =>
45, 60, 72, 16, 61, 86, 55, 85, 43, 63, 36, 62, 56, 30, 11, 6, 4, 74, 62, 48, 80,
4294967297 =>
58, 1, 73, 94, 100, 87, 71, 100, 86, 77, 92, 61, 19, 62, 66, 34, 40, 94, 47, 85, 42,
68719476736 =>
45, 60, 72, 16, 61, 86, 55, 85, 43, 63, 36, 62, 56, 30, 11, 6, 4, 74, 62, 48, 80,
68719476752 =>
79, 68, 49, 6, 56, 70, 96, 14, 64, 30, 78, 86, 69, 36, 17, 14, 93, 16, 6, 32, 44,
68719476992 =>
96, 84, 41, 53, 80, 51, 92, 32, 97, 98, 41, 36, 62, 14, 6, 43, 20, 94, 38, 23, 38,
68719542272 =>
85, 59, 62, 82, 50, 66, 62, 34, 52, 28, 24, 81, 86, 24, 71, 86, 92, 55, 36, 29,44,
1099511627776 =>
45, 60, 72, 16, 61, 86, 55, 85, 43, 63, 36, 62, 56, 30, 11, 6, 4, 74, 62, 48, 80,
2^32 以上は 32bit int に収まる範囲に剰余を取った値を使っているように見えます。
ということで、
>入力された文字をMD5でハッシュを出し、その中から英字を取り除いた物を使っています。
もうちょっとがんばって、32bit intに収まる範囲に縮めてみてはどうでしょうか。
お礼
わざわざスクリプトまでお書きいただき、分かりやすく教えてくださりありがとうございます。これからやってみます。
補足
substrを使って9文字切り取ってそれをseedにしたら見事解決できました。ありがとうございました。