UNPKG

js_mt_rand

Version:

A pseudo-random generator that can produce the same numbers as the php's mt_rand do with given seed.

81 lines (56 loc) 1.69 kB
js_mt_rand ========== A pseudo-random generator that can produce the same numbers as php's mt_rand do with given seed. the javascript version of 32-bit php_mt_rand; ported from [php-src/ext/standard/mt_rand.c](https://github.com/php/php-src/blob/master/ext/standard/mt_rand.c) Install ------- ### via npm ``` $ npm install js_mt_rand ``` ### via yarn ``` $ yarn add js_mt_rand ``` Usage ----- ```javascript import JSMTRand from 'js_mt_rand'; let mt = new JSMTRand(); // seed the generator mt.srand(0); // php 7.1+ Mersenne Twister implementation (default) mt.srand(0, JSMTRand.MODE_MT_RAND_19937); // get next random number, range: [0, 2 ^ 32 - 1) // N.B. MODE_MT_RAND_19937 has a wider range than MODE_MT_RAND_PHP let m = mt.rand(0, 0xFFFFFFFF); // php 5.x backward compatibility. mt.srand(0, JSMTRand.MODE_MT_RAND_PHP); // get next random number, range: [0, 2 ^ 31 - 1] let n = mt.rand(); // get next random number in range: [min, max], max is inclusive let r = mt.rand(min, max); ``` Pitfall ------- Due to the PHP 7.1.0 to 7.2.0beta2 mt_rand() modulo bias [bug](https://externals.io/message/100229), the `JSMTRand.rand(min, max)` may return different results between php 7.1.0 to 7.2.0beta2, just use `JSMTRand.rand()` instead and wrap your own range function. Since the bip operators in javascript are not support 64 bits integer yet, the generator would only work with 32 bits range. Changelog --------- See [CHANGELOG](CHANGELOG.md) License ------- The MIT License (MIT) Credits ------- Authors of PHP 7.1+: Rasmus Lerdorf, Zeev Suraski, Pedro Melo, Sterling Hughes. Based on code from: Richard J. Wagner, Makoto Matsumoto, Takuji Nishimura, Shawn Cokus.