一个能够与 PHP 产生相同随机数的 Javascript MT19937 伪随机数生成器。
从 PHP 源码移植: php-src/ext/standard/mt_rand.c
$ npm install js_mt_rand
$ yarn add js_mt_rand
import JSMTRand from 'js_mt_rand';
let mt = new JSMTRand();
// 设置随机数种子
mt.srand(seed);
// 默认使用 php 7.2+ 版的 Mersenne Twister 实现
mt.srand(seed, JSMTRand.MODE_MT_RAND_19937);
// 向后兼容 php 5.x
mt.srand(seed, JSMTRand.MODE_MT_RAND_PHP);
// 取随机数,范围 [0, 2 ^ 31 - 1]
let n = mt.rand();
// 取随机数,范围 [min, max],包含 max
// php 7.2+ 详情见注意事项.
// 注意:MODE_MT_RAND_19937 支持的范围比 MODE_MT_RAND_PHP 要大
let m = mt.rand(min, max);由于 PHP 7.1.0 到 7.2.0beta2 版本的 mt_rand() 有一个 bug, 导致了 JSMTRand.rand(min, max) 在这几个版本可能返回不一样的结果。遇到这种情况,请使用不带范围参数的 JSMTRand.rand() 方法,并自己封装范围取值函数。
另外由于 Javascript 的位运算尚不支持 64 位整数,所以当前随机数的处理范围被限制在 32 位以内。
参见 CHANGELOG
The MIT License (MIT)
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.