创建 GUID/UUID

根据 RFC 4122,UUID(通用唯一标识符)也称为 GUID(全局唯一标识符),是设计用于提供特定唯一性保证的标识符。

虽然可以在几行 JavaScript 代码中实现符合 RFC 兼容的 UUID,但有几个常见的陷阱:

  • 无效的 ID 格式(UUID 的格式必须为 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,其中 x 是 [0-9] 或 [a-f] 之一,M 是 [1-5] 之一,N 是 [8、9、a 或 b]。
  • 使用低质量的随机源(例如 Math.random)

因此,鼓励为生产环境编写代码的开发人员使用严格的、维护良好的实现,例如 uuid 模块。它还有另外一个竞品 NanoID,很多用过的都说没有明显的缺点或限制。

另外,Node.js 中的 crypto 模块有一个 randomUUID() 方法可以生成 UUID。它是一个新的标准,且受到越来越多的浏览器支持

const crypto = require('crypto')

crypto.randomUUID() // bb2c6a75-b373-4c24-a3c3-1fb0911a8a25

如果这两种方法都不适用于您,还有以下最原始的方法:

function uuidv4() {
  return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
    (
      c ^
      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
    ).toString(16)
  )
}

uuidv4() // 'ab399796-c3b4-4329-903a-4db62af83a17'

但强烈建议不要使用任何依赖 Math.random() 的 UUID 生成器。基于 Math.random() 的解决方案不能提供良好的唯一性保证。点击查看详情

更多资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值