在JavaScript中相当于Python的uuid.uuid4().hex吗?

6

Python具有创建十六进制UUID的功能,如下所示:

>>> import uuid
>>> uuid.uuid4().hex
'47be94c37e484e13ab04ed3c54a5b681'
  • 在客户端JavaScript中是否可以使用相同的十六进制格式化方法?
  • 有没有一种方法来“验证”客户端发送回来的UUID?例如,防止或注意到恶意用户发送的“1234abcdsh*t…”。

一个解决方案的想法是在前端随机生成每个32个字符,但我不知道hex UUID是否有什么特别之处,也不确定是否有一种好的方法来验证客户端是否发送了有效值(而不是一系列32个a)。

编辑:刚意识到“hex”格式没有任何特殊之处,只是缺少破折号。将保留该项目以防混淆其他人。


有没有一种方法可以验证客户端是否发送了有效的UUID?我也不确定是否有一种好的方法来验证客户端是否发送了有效的值 - 你能澄清一下你想要什么吗?(除了你能在JavaScript中做到这一点之外) - Randy Casburn
这真不算太难...我喜欢谷歌,我真的推荐它:https://github.com/kelektiv/node-uuid - Randy Casburn
2
虽然有一些有趣的答案与这个副本相关,但对于v4 UUID来说,没有什么比const uuidv4 = () => ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));或者 const uuidv4hex = () => ([1e7,1e3,4e3,8e3,1e11].join('')).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));适合.hex等价物:p - Jaromanda X
1
好的,验证需要服务器上的代码进行检查 - 由于您没有指定您的服务器语言,所以我只能说您需要确保第13个字符是4,并且第17个字符是8->f(我想是这样)。 - Jaromanda X
显示剩余4条评论
1个回答

3
您可以使用缓冲区方便地转换为十六进制。
const uuid = require('uuid')
const buffer = Buffer.alloc(16);

uuid.v4({}, buffer);
console.log(buffer.toString('hex'));

不是最干净和最优雅的解决方案,但可以完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接