PHP Generetreting一个数字从0-36证明是公平的

时间:2019-06-14 15:06:53

标签: php math hash

我正在尝试在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相同时,该数字就应该相同。

1 个答案:

答案 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);  
}

https://3v4l.org/QMgNR