我正在使用Math.random创建一个唯一值。 但是,看起来好像在几天后,如果我运行相同的脚本,它会产生与之前创建的相同的值。
每次运行脚本时,有没有办法创建唯一值。 下面是我的随机方法代码。
var RandomNo = function (Min,Max){
return Math.floor(Math.random() * (Max - Min + 1)) + Min;
}
module.exports = RandomNo;
答案 0 :(得分:1)
获得唯一值的最佳方法是使用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个字符的序列。