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

JavaScript中的非重复伪随机数生成器,javascript,random,Javascript,Random,我想用JavaScript生成6位数字优惠券代码 我想用类似的东西 这就是我到目前为止所做的 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_intermed

我想用JavaScript生成6位数字优惠券代码

我想用类似的东西

这就是我到目前为止所做的

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>";
}
常数p=1000003;
函数置换器(x){
常数剩余=x*x%p;

return(x此选项有效且唯一:

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;
常数p=1000003;
常数seed1=123456;
常数seed2=123457;
函数计算器(x){
常数剩余=x*x%p;

return(x此选项有效且唯一:

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;
常数p=1000003;
常数seed1=123456;
常数seed2=123457;
函数计算器(x){
常数剩余=x*x%p;

返回(x)自己将其转换为JavaScript?尽管在现实中,您所需要做的只是洗牌一个有序数组。请参阅和。您的所有操作都非常有用。对我来说,这似乎是一个有效的问题,并且它肯定不会问与洗牌数组相同的问题。OP发布的链接用于生成唯一的随机数,而不会产生数组开销。@obiwahn,…我刚刚从您的链接中快速转换了源代码,它似乎运行良好。通过创建1000万个随机数进行测试,并检查是否存在重复。如果这个问题被解决,我可以在这里发布。@Keith您也可以在注释中发布指向JSFIDLE的链接here@obiwahn它被搁置了(我猜)因为最初的措辞听起来像是在找人给你指点一个非现场资源。我重新措辞了你的问题,专门要求帮助用JS重写算法,然后将其标记为重新打开。自己将其转换为JavaScript?尽管实际上,你只需洗乱一个有序数组。请参阅和。你的全部非常有帮助。对我来说,这似乎是一个有效的问题,它肯定不会问与洗牌数组相同的问题。OP发布的链接用于生成唯一的随机数,而不会产生数组开销。@obiwahn,…我刚刚从您的链接中快速转换了源代码,它似乎工作正常。通过创建10进行测试百万个随机数,并检查是否有重复。如果这个问题被搁置,我可以在这里发布。@Keith您也可以在评论中发布一个指向JSFIDLE的链接here@obiwahn它被搁置了(我猜)因为最初的措辞听起来像是在找人给你指点一个非现场资源。我重新措辞了你的问题,专门要求帮助用JS重写算法,然后将其标记为重新打开。