我想每次都生成一个唯一的号码。我为此使用了加密模块。
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 ,不是随机的。但是,对于大多数用例,您将无法分辨出差异。
现在,如果您需要独特的,那么您可以使用以下两种相当简单的方法:
- 将您已使用过的每个号码存储在数据库中,或者
- 从 0 开始,每次递增 1,并在必要时添加前导零(如果不需要前导零,则从 10^7 开始)。有了这个,您所需要做的就是存储最后使用的号码。但是,使用这种方法,结果是确定性的,这可能是一个安全缺陷,具体取决于您的用例。
关于javascript - 如何在 Node js 中使用加密生成唯一的 8 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76028046/