ハッシュは基本的に、基数が 16 の数値です。そうは言っても、それを int に変換するだけです。
問題は、次のようにハッシュを int に変換する場合です。
echo intval(hash('sha256','asdf'),16);
32 ビット システムでは常に 2147483647 を取得します。これは、intval の最大値です。
私の提案は、ハッシュの値を次のように最初の数文字にカットすることです
echo intval(substr(hash('sha256','bsbaf'),0,6),16);
これが乱数のシードになり、次の方法で乱数を取得できます。
$hash = hash('sha256','bsbaf');
$seed = intval(substr($hash,0,6),16);
mt_srand($seed);
echo mt_rand(0,15000000);
場合によっては、ハッシュの最初の 6 文字のみを使用しているため衝突が発生する可能性がありますが、ほとんどの場合、これは問題にはなりません。あなたの特定のユースケースがわからないので、これが許容できるかどうかを判断するのはあなた次第です.
更新:別の方法は、結果のシードからモジュロを作成することです-次のように:
$hash = hash('sha256','bsbaf');
$seed = intval(substr($hash,0,6),16);
echo $seed % 15000000;