Я заполнение массива случайных чисел с помощью $blockhash[$i] = rand().time().rand()
SHA512 для генерации случайных чисел в PHP
Тогда для каждого случайного числа в этом массиве рассчитать корреспондентском SHA512
$SecretKey = "60674ccb549f1988439774adb82ff187e63a2dfd403a0dee852e4e4eab75a0b3";
$sha = hash_hmac('sha512', $value, $SecretKey);
Разделить его:
$pool = str_split($sha, 2);
Тогда я получаю первый номер из массива пула $, конвертировать гекс в десятичную и ограничить его в пределах 1 и 50:
$dec = hexdec($pool[0]) % 50 + 1;
Проблема в том, что цифры не являются случайными, и я не знаю почему. Я подсчитываю частоту для каждого номера от 1 до 50, но цифры 1,2,3,4,5 и 6 чаще появляются, чем другие. См график
Почему это происходит и как это исправить? Благодаря!
Да, я мог бы пойти простым путем, просто сделав это, но мне действительно нужно получить байт из хэша, а затем ограничить его. Итак, каков способ ограничить его до 1-50 без по модулю? – andrepcg
@andrepcg: см. Обновленный answe – Mchl