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

问题描述 投票:0回答:5

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

这时我使用这段代码:

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

它返回我的数字,如-13915-28806 ...

它大部分时间都可以工作,但是当这个代码在promises中执行时(因此几乎同时执行多次)我遇到了问题。然后有时我有两个相同的身份证。

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

javascript typescript
5个回答
0
投票

互联网有很多例子。你可以从使用Math.random()开始。例如:生成1到100之间的随机数

Math.floor((Math.random() * 100) + 1);

请记住,它并非真正随机;它不具有加密安全性。如果需要,您应该查看库


0
投票

var datetimestamp = Date.now()+ Math.random()。toString(36).substr(2,9);


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之间的唯一数字。它也会在最大长度处停止。


0
投票
  1. Math.random()本身应该足够安全,64位数字。即使使用不完美的发电机,两次击中相同数字的几率也是微不足道的。
  2. 如果你追求的是特定的整数,那么将Math.random()乘以大的东西,比如Number.MAX_SAFE_INTEGER
  3. 为了完全安全,您始终可以存储已使用的ID数组,并编写一个函数,只要获取一个新的唯一编号,将其推送到数组中,然后返回该值。将所有功能包含在单个对象/函数/类中,以保持整洁。

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

© www.soinside.com 2019 - 2024. All rights reserved.