Javascript 将UUIDV4转换为以16为基数的十进制

Javascript 将UUIDV4转换为以16为基数的十进制,javascript,uuid,Javascript,Uuid,我不想在API中共享我的主键,所以我使用UUID4生成唯一的行id。 但我需要使用生成的uuid查找该行,这可能会导致性能问题,因为它的字符串和长度太长。 我尝试将此uuid转换为以16为基数的十进制。 const uuid = UUIDV4() //57d419d7-8ab9-4edf-9945-f9a1b3602c93 const uuidToInt = parseInt(uuid, 16) console.log(uuidToInt) //1473518039 默认情况下,它仅将第一个块

我不想在API中共享我的主键,所以我使用UUID4生成唯一的行id。
但我需要使用生成的uuid查找该行,这可能会导致性能问题,因为它的字符串和长度太长。
我尝试将此uuid转换为以16为基数的十进制。

const uuid = UUIDV4() //57d419d7-8ab9-4edf-9945-f9a1b3602c93
const uuidToInt = parseInt(uuid, 16)
console.log(uuidToInt) //1473518039
默认情况下,它仅将第一个块转换为十进制
这样使用安全吗?
有多大的可能性会失去行的唯一性

我试着将这个uuid转换为以16为基数的十进制

十进制或十六进制。一个数字不能两者都是。除此之外,uuid已经是十六进制格式

这就是如何将其转换为十进制值的方法

var uuid=“57d419d7-8ab9-4edf-9945-f9a1b3602c93”;
var hex=“0x”+uuid.replace(/-/g,”);
var值=BigInt(十六进制);

var decimal=value.toString();//不要将其转换为数字。 console.log({ uuid, 十六进制, 十进制的
});它只是将uuid的第一部分转换为“-”。你不能用一个“parseInt”就这么做。是的,我意识到了这一点,也更新了描述。谢谢也许我们应该从你的第一句话开始:“我不想在API中共享我的主键”为什么不呢?这些是UUID还是数字?如果它们是数字的,除了作为唯一标识符之外,它们还会公开任何信息吗?当然会<代码>用户/:id/profile
。也许是糟糕的路线设计。但如果其他人试图获取用户的数据呢。也许是管理员。所以是的,“也许是糟糕的路线设计”一点也不。“但如果有其他人试图获取用户的数据,该怎么办?”然后他就不应该获取数据。API端点应该得到保护,只有具有正确凭据的人才能访问它们。通过模糊性实现的安全性非常弱。“不要将其转换为数字。”…它将再次成为字符串,事情将和以前一样。我很感激你的建议,但我想要一个更容易查询的号码。如果尝试只转换前两个部分会怎么样?@SujeetAgrahari“…它将再次成为字符串”现在是什么数字或字符串?将uuid转换为64位浮点值(JS编号)会丢失大量信息,每个生成的编号可能有37778931862957161709568个uuid。这就是你失去的独特性。