Как я могу получить ряд воспроизводимых псевдослучайных чисел в PHP?
В более старых версиях PHP я мог бы это сделать, просто используя одно и то же семя в RNG , но он больше не работает, поскольку PHP изменил способ работы rand и mt_rand.
Также см. Этот комментарий на странице PHP.net:
Имейте в виду, что патч Suhosin, установленный по умолчанию на многих установках PHP, таких как Debian и DirectAdmin, полностью отключает функции srand и mt_srand для обеспечения безопасности шифрования. Чтобы генерировать воспроизводимые случайные числа из фиксированного семени на сервере, закрепленном на Сухозине, вам нужно будет включить свой собственный псевдослучайный код генератора.
ссылка на этот комментарий: http://www.php.net/manual/en/function.srand.php#102636
Готово ли решение? У меня нет времени и опыта создания собственного псевдослучайного кода генератора.
Моя цель – иметь код
<?php //( pseudo random code here...) $the_seed = 123; // 123 is just a number for demo purposes, NOT a static number //...i hope you get the idea. It's just a hardcoded seed, // it could be a seed based on a user-id, a date etc... // we need the same output for a given seed. //( pseudo random code here...) // ...and finally echo $the_random_number; ?>
поэтому каждый раз, когда я посещаю эту страницу, я должен получить тот же номер.
Mersenne Twist – это хороший быстрый PRNG, и для него реализована реализация PHP в общедоступном домене:
http://kingfisher.nfshost.com/sw/twister/
Это работает только на PHP 5.3.0 и выше.
Одним из лучших алгоритмов случайных чисел по некоторым показателям является Mersenne Twister. Здесь вы можете найти чистую версию PHP (есть и другие).
Затем вы можете позвонить:
init_with_integer($integer_seed)
и каждый раз получать одинаковый результат (для данного семени).
Это не лучший, но это одно работающее
function ranseed($min, $max, $seed) { return round($min + (hexdec(md5($seed)) / hexdec("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")) * ($max - $min)); }