javascript - 每次我运行 java 脚本代码时,如何创建一个唯一值?
问题描述
我正在使用 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 个字符。
推荐阅读
- python - Python Scraping:尝试根据用户输入抓取特定数据(电话详细信息)
- javascript - Webpack 开发服务器:如何将 localhost 端口重定向到不同端口的 URL
- python - 添加到(“cuda:0”)后PyTorch渐变不起作用
- protocols - 十六进制字符串产生半清晰的输出。如何找到其余部分的编码方式及其含义?
- angular - 使用 @Output 和 EventEmitter 在 Angular 中的两个组件之间进行通信
- swift - “找不到类”即使我之前在另一个视图控制器中做过,但它不起作用
- vba - 在 Mac 上使用 Excel VBA 进行 WebScraping
- javascript - 等待一个 redux 调度
- testing - 如何在 Ionic 中对相机组件进行单元测试
- c# - 如何将 id 参数传递给 .ashx 文件上传