我需要在javascript(或Typescript)中获得唯一的随机数。
这时我使用这段代码:
var id = -((new Date()).getTime() & 0xffff);
它返回我的数字,如-13915
或-28806
...
它大部分时间都可以工作,但是当这个代码在promises中执行时(因此几乎同时执行多次)我遇到了问题。然后有时我有两个相同的身份证。
在任何情况下都有任何解决方案可以获得唯一的随机数吗?
互联网有很多例子。你可以从使用Math.random()
开始。例如:生成1到100之间的随机数
Math.floor((Math.random() * 100) + 1);
请记住,它并非真正随机;它不具有加密安全性。如果需要,您应该查看库
var datetimestamp = Date.now()+ Math.random()。toString(36).substr(2,9);
创建一个返回唯一编号的函数:
let numbers = [];
const uniqueNumber = (maxVal) => {
const number = Math.floor((Math.random() * maxVal) + 1);
if (!numbers.includes(number)) {
numbers.push(number);
return number;
} else if (numbers.length - 1 !== maxVal) {
uniqueNumber(maxVal);
}
}
const randomNumber = uniqueNumber(100);
console.log(numbers) // returns all unique numbers
这将返回1到100之间的唯一数字。它也会在最大长度处停止。
Number.MAX_SAFE_INTEGER
。你可以使用包uuid:
const uuidv4 = require('uuid/v4');
uuidv4(); // ⇨ '10ba038e-48da-487b-96e8-8d3b99b6d18a'
注意:它是一个数字(128位数字)但它太大而不能用作JavaScript编号。你必须把它保持为一个字符串。
如果您在浏览器上需要它,我建议从后端公开的API生成标识符。大多数语言都存在UUID的实现。 npm包将适用于浏览器,但它使用a fallback to Math.random,这是不安全的。