// Found this seed-based random generator somewhere
// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)
var seed = 1;
/**
* return a random number based on a seed
* @param seed
* @returns {number}
*/
function getNextValue() {
seed = (seed * 9301 + 49297) % 233280;
return seed/(233280.0);
}
function setSeed(_seed_) {
seed = _seed_;
}
module.exports = {
nextValue: getNextValue,
seed: setSeed
};
见https://github.com/dylang/shortid/blob/master/lib/random/random-from-seed.js
最佳答案 它不是一个随机数生成器,而是一个基于提供的种子的伪随机数.重置种子将重置getNextValue并提供一致的输出.
正如评论所提到的,这段代码基于The Central Randomizer.显然这段代码是因为Math.random在现在过时的Netscape 2中不起作用而创建的.反过来,这种实现基于现有的伪随机数生成器.有关此算法起源的更多信息,请参见Original source of (seed * 9301 + 49297) % 233280
random algorithm?.
从技术上讲,Math.random也是伪随机的,但您无法控制种子,因此此代码确实具有潜在有用的属性.如果为它提供一致的种子,则可以在重新加载时获得一致的输出.