我需要在javascript(或Typescript)中获得唯一的随机数。
此刻,我使用以下代码:
var id = -((new Date()).getTime() & 0xffff);
它返回给我-13915
或-28806
等数字...
它在大多数时间都有效,但是当我按承诺执行此代码时(同时几乎多次),我遇到了问题。然后有时候我得到两个相同的ID。
在任何情况下都有解决方案来获得唯一的随机数吗?
答案 0 :(得分:0)
关于互联网的例子很多。您可以从使用Math.random()
开始
。例如:生成1到100之间的随机数
Math.floor((Math.random() * 100) + 1);
请记住,它并不是真正的随机性; 它不是加密安全的。如果需要,您可能应该研究图书馆
答案 1 :(得分:0)
var datetimestamp = Date.now()+ Math.random()。toString(36).substr(2,9);
答案 2 :(得分:0)
创建一个返回唯一数字的函数:
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之间的不定数。它还将以最大长度停止。
答案 3 :(得分:0)
Math.random()本身应该足够安全,对于64位数字而言。即使使用了不完善的生成器,两次击中相同数字的机会也很小。
如果要使用特定的整数,则将Math.random()乘以BIG,例如Number.MAX_SAFE_INTEGER
。
为完全安全起见,您始终可以存储一个已经使用过的id的数组,并编写一个函数,该函数只要获得新的唯一数字就将其绘制,然后将其压入数组并返回值。将所有功能都封装在单个对象/功能/类中,以保持其整洁。
答案 4 :(得分:0)
您可以使用软件包uuid:
const uuidv4 = require('uuid/v4');
uuidv4(); // ⇨ '10ba038e-48da-487b-96e8-8d3b99b6d18a'
注意:它是一个数字(128位数字),但太大而无法用作JavaScript数字。您必须将其保留为字符串。
如果在浏览器上需要它,我建议从后端公开的API生成标识符。 UUID的实现以大多数语言存在。 npm软件包可在浏览器上运行,但随后会使用a fallback to Math.random,这是不安全的。