首页 > 解决方案 > 每次我运行 java 脚本代码时,如何创建一个唯一值?

问题描述

我正在使用 Math.random 来创建一个独特的值。但是,看起来几天后,如果我运行相同的脚本,它会产生与之前创建的相同的值。

每次我运行脚本时,有什么方法可以创造独特的价值。下面是我的随机方法代码。

var RandomNo = function (Min,Max){
    return Math.floor(Math.random() * (Max - Min + 1)) + Min;
}

module.exports = RandomNo;

标签: javascriptnode.jstypescriptjavascript-objects

解决方案


实现唯一值的最佳方法是将 Date() 用作毫秒。这种增加的时间表示将永远不会重复。

这样做:

var RamdomNo = new Date().getTime();

完毕。

编辑

如果您受到长度限制,则上述解决方案将无济于事,因为使用越来越短的数字可以预测重复。

然后我建议以下方法:

// turn Integer into String. String length = 36
function dec2string (dec) {
  return ('0' + dec.toString(36)).substr(-2);
}

// generate a 20 * 2 characters long random string
function generateId () {
  var arr = new Uint8Array(20);
  window.crypto.getRandomValues(arr);

  // return 5 characters of this string starting from position 8.
  // here one can increase the quality of randomness by varying
  // the position (currently static 8) by another random number <= 35
  return Array.from(arr, this.dec2string).join('').substr(8,5);
}

// Test
console.log(generateId());

这对方法生成一个由字母和数字组成的 40 个字符长的随机字符串。然后你从中挑选出一连串的 5 个字符。


推荐阅读