Skip to content

Latest commit

 

History

History
77 lines (54 loc) · 1.61 KB

File metadata and controls

77 lines (54 loc) · 1.61 KB

js_mt_rand

一个能够与 PHP 产生相同随机数的 Javascript MT19937 伪随机数生成器。

从 PHP 源码移植: php-src/ext/standard/mt_rand.c

安装

通过 npm

$ npm install js_mt_rand

或者 yarn

$ 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

License

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.