javascript - 如何在 Node js 中使用加密生成唯一的 8 位数字?

标签 javascript node.js random cryptojs

我想每次都生成一个唯一的号码。我为此使用了加密模块。

const alphanu = crypto.randomBytes(16).toString('hex')

这将生成长度为32的字母数字字符串。我想生成长度为8的数字。

我也尝试过 randomInt。

const num = crypto.randomInt(10000000,99999999)

它总是会生成唯一的编号吗?

如何实现我想要的目标?

最佳答案

您的“独特”要求将比您想象的更难实现。如果您的意思是“非确定性”,那么只需使用 crypto.randomInt() 就像您在问题中所做的那样:

crypto.randomInt(10**7, 10**8-1) // 8 digit, no leading zeroes
crypto.randomInt(0, 10**8-1).toString().padStart(8, "0") // 8 digits, allows leading zeroes

从技术上来说,这是psuedorandom ,不是随机的。但是,对于大多数用例,您将无法分辨出差异。

现在,如果您需要独特的,那么您可以使用以下两种相当简单的方法:

  1. 将您已使用过的每个号码存储在数据库中,或者
  2. 从 0 开始,每次递增 1,并在必要时添加前导零(如果不需要前导零,则从 10^7 开始)。有了这个,您所需要做的就是存储最后使用的号码。但是,使用这种方法,结果是确定性的,这可能是一个安全缺陷,具体取决于您的用例。

关于javascript - 如何在 Node js 中使用加密生成唯一的 8 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76028046/

相关文章:

javascript - Ember.js 无法设置 ArrayController 的内容

javascript - ExpressJS获取post参数以及外部javascript函数的使用

javascript - Math.random 和 JavaScript 中的网络编程

javascript - 这个ES6函数的含义或解释是什么

javascript - 在自定义 View 中调用 super() 时,确保传递与传递组件的构造函数相同的 Prop

javascript - 将字符串与数组匹配

javascript - 将 Angular2 应用程序的必要依赖项上传到 Web 主机

javascript - mongo聚合添加日期和总和

postgresql - 如何生成组的随机样本,包括组中的所有人,其中 group_id(但不是 person_id)随时间变化?

scala - Spark中的takeSample()函数