Thursday, May 10, 2012

reproducible random number series


How can i get a series of reproducible pseudorandom numbers in PHP?



In older versions of PHP i could do that just by using the same seed in the RNG , but it does not work anymore since PHP has changed the way rand and mt_rand works.



Please also see this comment in PHP.net page:




Keep in mind that the Suhosin patch which is installed by default on many PHP-installs such as Debian and DirectAdmin completely disables the srand and mt_srand functions for encryption security reasons. To generate reproducible random numbers from a fixed seed on a Suhosin-hardened server you will need to include your own pseudorandom generator code.




link of that comment: http://www.php.net/manual/en/function.srand.php#102636



Is there any solution ready? I do not have the time nor the experience to create my own pseudo-random generator code.



My goal is to have a code




<?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;
?>



so everytime i visit this page i should get the same number.


Source: Tips4all

2 comments:

  1. The Mersenne Twist is a nice fast PRNG and here's a public domain PHP implementation for it:

    http://kingfisher.nfshost.com/sw/twister/

    That only works on PHP 5.3.0 and above. Another option, as noted by Sharky, is more compatible with earlier versions of PHP:

    http://boxrefuge.com/?p=18

    ReplyDelete
  2. One of the best random number algorithms by some metrics is Mersenne Twister.
    You can find a pure PHP version here (there are others).

    You can then call:

    init_with_integer($integer_seed)


    and get the same output (for a given seed) every time.

    ReplyDelete