我正在尝试在php中生成一个从0到36的数字,可以证明以后比较公平。
我到处都是Google,找到了一个有效的公式,但是让它在PHP中工作有点麻烦。
roll_hash = hash("sha256", server_seed + "-" + lottery + "-" + roll_id);
roll_hash_first16 = substr(roll_hash, 0, 16);
roll_lucky_number = hex_to_uint64(roll_hash_first16) % 15;
是我找到的公式,但是我无法在PHP中使用它。
这是我尝试过的PHP代码,但是并不能满足我的需要。
$server_seed = "577701c29f6e4a409b8a607cb95c79c943146dc7dff3eb6894a34837076e7365";
$salt = "fe5e5c41b";
$roll_id = 0;
$roll_hash = hash("sha256", $server_seed + "-" + $salt + "-" + $roll_id);
$roll_hash_first16 = substr($roll_hash, 0, 36);
$roll_lucky_number = hexdec($roll_hash_first16) / 35;
这段代码只会生成类似“ 5.3687216943283283E + 41”的内容
我需要它来生成一个从0到36的纯数字,并且每当服务器种子,salt和roll_id相同时,该数字就应该相同。
答案 0 :(得分:0)
不过,这是PHP代码的更正版本:
function generateRandomNumber(string $seed, string $salt, int $roll): int
{
$roll_hash = hash("sha256", $seed . "-" . $salt . "-" . $roll);
$roll_hash_first16 = substr($roll_hash, 0, 16);
return abs(hexdec($roll_hash_first16) % 37);
}