在JavaScript或打字稿中生成唯一的随机数

时间:2019-04-03 08:49:10

标签: javascript typescript

我需要在javascript(或Typescript)中获得唯一的随机数。

此刻,我使用以下代码:

var id = -((new Date()).getTime() & 0xffff);

它返回给我-13915-28806等数字...

它在大多数时间都有效,但是当我按承诺执行此代码时(同时几乎多次),我遇到了问题。然后有时候我得到两个相同的ID。

在任何情况下都有解决方案来获得唯一的随机数吗?

5 个答案:

答案 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)

  1. Math.random()本身应该足够安全,对于64位数字而言。即使使用了不完善的生成器,两次击中相同数字的机会也很小。

  2. 如果要使用特定的整数,则将Math.random()乘以BIG,例如Number.MAX_SAFE_INTEGER

  3. 为完全安全起见,您始终可以存储一个已经使用过的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,这是不安全的。

另请参阅:Universally unique identifier