我正在使用 Math.random 来创建一个独特的值。但是,看起来几天后,如果我运行相同的脚本,它会产生与之前创建的相同的值。
每次运行脚本时,有什么方法可以创建唯一值。下面是我的随机方法代码。
var RandomNo = function (Min,Max){
return Math.floor(Math.random() * (Max - Min + 1)) + Min;
}
module.exports = RandomNo;
获得唯一值的最佳方法是使用 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 个连续字符组成的序列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句