我正在寻找一种在base 64中创建长度为16个字符的UUID的有效方法。每个ID都必须是随机的,因此您无法预测其他ID。
此外,我不确定如何检查碰撞是否发生,我怎么能以有效的方式寻找它们。我使用的是mongoDB和服务器Node JS。
一个例子: 我调用该函数来创建1.000.000密钥,并且在数据库中已经保存了数百万个密钥。如果不将每个密钥与数据库中现有密钥进行比较,我怎样才能保证每个密钥只存在?
我希望有人可以帮助我。谢谢:))
答案 0 :(得分:0)
至于生成这样的ID,我们知道Base64编码大约是原始二进制的1/3,我们可以简单地生成12个字节的随机性,然后编码:
const crypto = require('crypto');
function generateRandomID() {
return new Promise((res) => {
crypto.randomBytes(12, (err, buf) => {
if(err) throw err;
const enc = buf.toString('base64');
if(enc.length !== 16) throw 'invalid';
res(enc);
});
});
}
generateRandomID()
.then((id) => console.log(id))
.catch((err) => console.log(err));
我没有MongoDB专家,但我确信它有独特的索引,因此您只需尝试添加一个与以前存在的ID相同的文档,并且&#&# 39; d失败。