如何创建GUID / UUID

如何创建GUID / UUID

技术背景

GUID(Globally Unique Identifier)和 UUID(Universally Unique IDentifier)通常可互换使用,是一种由数字和字母组成的128位标识符,根据 RFC 4122 标准设计,旨在提供一定的唯一性保证。在很多场景中,如数据库记录的唯一标识、分布式系统中的数据区分等,都需要使用到 UUID。

实现步骤

现代浏览器和 JS 运行时的标准方法

在所有现代浏览器和 JS 运行时中,crypto.randomUUID() 已成为标准方法。不过,由于新的浏览器 API 仅限于安全上下文,此方法仅适用于本地提供的页面(localhost127.0.0.1)或通过 HTTPS 提供的页面。

1
2
const uuid = crypto.randomUUID();
console.log(uuid);

使用 uuid 模块

对于需要生成其他 UUID 版本、在旧平台上或非安全上下文中生成 UUID 的情况,可以使用 the uuid module。它经过了充分测试和支持。

安装

1
npm install uuid

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const { v1, v4, v5 } = require('uuid');

// 生成 v1 UUID(基于时间)
const uuidV1 = v1();
console.log(uuidV1);

// 生成 v4 UUID(随机)
const uuidV4 = v4();
console.log(uuidV4);

// 生成 v5 UUID(命名空间)
const MY_NAMESPACE = 'previously generated unique uuid string';
const uuidV5 = v5('hello', MY_NAMESPACE);
console.log(uuidV5);

自定义实现

如果以上方法不适用,也可以使用自定义函数生成 UUID。

1
2
3
4
5
6
7
function uuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
}

console.log(uuidv4());

最佳实践

  • 使用标准方法:优先使用 crypto.randomUUID() 方法,因为它是现代浏览器和 JS 运行时的标准方法,并且具有良好的安全性和性能。
  • 使用成熟的库:如果需要生成其他版本的 UUID 或在旧平台上运行,建议使用 uuid 模块,它经过了充分测试和支持。
  • 避免使用 Math.random():基于 Math.random() 的 UUID 生成器不能提供良好的唯一性保证,强烈建议避免使用。

常见问题

  • 兼容性问题crypto.randomUUID() 方法仅适用于现代浏览器和 JS 运行时,在旧版本的浏览器中可能不支持。可以使用 uuid 模块来解决兼容性问题。
  • 唯一性问题:虽然 UUID 设计用于提供一定的唯一性保证,但由于生成算法的随机性,仍然存在极小的碰撞概率。在对唯一性要求极高的场景中,需要进行额外的检查。

如何创建GUID / UUID
https://119291.xyz/posts/how-to-create-guid-uuid/
作者
ww
发布于
2025年5月8日
许可协议