javascript - JavaScript 中的非重复伪随机数生成器

标签 javascript random

我想在 JavaScript 中生成 6 位数字优惠券代码。

我想使用像 Preshing's algorithm 这样的东西。

这是我到目前为止所拥有的,

const p = 1000003;

function permuteQPR(x) {
  const residue = x * x % p;
  return (x <= p/2) ? residue : p - residue;
}

function next() {
  return permuteQPR(
    (permuteQPR(m_index++) + m_intermediateOffset) ^ 0x5bf03635
  );
};

const seedBase = 123456;
const seedOffset = 44;
m_index = permuteQPR(permuteQPR(seedBase) + 0x682f0161);
m_intermediateOffset = permuteQPR(
  permuteQPR(seedOffset) + 0x46790905
);

for (i = 0; i < 20; i++) {
  document.body.innerHTML += ('000000' + next()).substr(-6) + "<br>";
}

还有一个 jsfiddle

最佳答案

这个有效且独一无二:

const p = 1000003;
const seed1 = 123456;
const seed2 = 123457;


function calculateResidue(x) {
    const residue = x * x % p;
  return (x <= p/2) ? residue : p - residue;
}


function valueForIndex(index) {
        const first = calculateResidue((index + seed1) % p);
        return result = calculateResidue((first + seed2) % p);
};

let codes = [];
for(i=0;i<1000000;i++) {
    const code = valueForIndex(i);
  if(codes.indexOf(code)==-1) codes.push(code);
};


document.body.innerHTML += "Unique codes: " + codes.length;

关于javascript - JavaScript 中的非重复伪随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848001/

相关文章:

javascript - 将 &lt;script&gt; 标签中的 jquery 和 javascript 集成到 react 中

javascript - onload 事件的独立于浏览器的解决方法——有意义吗?

javascript - 为什么我要在要循环的数组之外获取返回元素?

Javascript函数不会打印

Java:创建随机字符串数字数组

javascript - select 标签的 insidehtml 不会更新所选选项

javascript - 轻松设置 "this"变量?

java - 从有界 nextInt(int bound) 结果中查找 Java.util.Random 种子

c - 随机数生成器添加 "-"以获取更大的长度

ios - Swift 中的 Perlin 噪声发生器