# Provably fair implementation

Neodice is a provably fair casino, that is why we provide our RNG algorithms and a detailed description of their work. Rest assured of our fairness!

## Random Number Generator

You can check and calculate the betting results using our algorithm or try any other independent software.

```
$luckyNumber = (static function(
string $serverSeed,
string $clientSeed,
int $nonce
): float {
$hash = hash_hmac('sha512', "${clientSeed}-${nonce}", $serverSeed);
$offset = 0;
do {
$number = hexdec(mb_substr($hash, $offset, 5));
$offset += 5;
}
while($number >= 1000000);
return ($number % 10000) / 100;
});
echo $luckyNumber($serverSeed, $clientSeed, $nonce);
```

## How it works?

In order to generate a roll of the dice, we combine your {Client seed} and {Nonce} into a string with a dash. Then, the SHA512.HMAC function is used to hash this string using the {Server seed}. This gives us a 128 character hex string.

Then, we take the first 5 characters of this hexadecimal string and convert them into a decimal integer (which will range from 0 to 1048575 (16 ^ 5-1)). If it's less than 1 million, we divide it by 10,000 and use it to roll the dice. This happens in 96% of cases. Otherwise, we use the next five characters of a 128 character hex string and repeat.

In the unlikely event that none of the 25 groups of five characters is less than 1 million when converted to decimal, we use the remaining 3 hexadecimal digits, which give a number in the range 0 to 4095, which is equivalent to a roll of a dice 0.0000 through 0,4095.

You can also use our online verifier to check any bet. Or use any other similar software.