wikimedia / alea
PHP port of the (non-cryptographic) Alea pseudo-random number generator
Requires
- php: >=7.4
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 40.0.1
- mediawiki/mediawiki-phan-config: 0.12.0
- mediawiki/minus-x: 1.1.1
- ockcyp/covers-validator: 1.6.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: 9.5.28
- wikimedia/update-history: 1.0.1
README
alea.php is a port of the non-cryptographic Alea pseudo-random number generator to PHP.
Alea was designed to be very fast (in JavaScript) and to generate non-platform-dependent repeatable sets of random numbers (when supplied with matching seeds). Given portable seeds (strings or integers, for example), numbers generated by the JavaScript version of alea will exactly match those generated by this PHP port, and vice-versa.
Install
This package is available on Packagist:
$ composer require wikimedia/alea
Usage
use Wikimedia\Alea\Alea; $prng = new Alea(); // add an optional seed parameter $nextRandom = $prng->random(); // or ->uint32() or ->fract53()
We also have the ability to sync up two Alea PRNGs (even across platforms)
via the importState
and exportState
methods.
$prng1 = new Alea(200); $prng1->random(); $prng1->random(); $prng2 = Alea::createWithState( $prng1->exportState() ); assert( $prng1->random() === $prng2->random() ); assert( $prng1->random() === $prng2->random() ); assert( $prng1->random() === $prng2->random() );
Acknowledgements
The Alea code was written (in JavaScript) by Johannes Baagøe, and packaged for npm by coverslide.
Read more on Johannes' site.
The port to PHP was initially done by C. Scott Ananian and is (c) Copyright 2019-2021 Wikimedia Foundation.
Both the original alea codebase and this port are distributed under the MIT license; see LICENSE for more info.