在 Node JS 中生成唯一 ID

Isaac Tony 2023年10月12日
在 Node JS 中生成唯一 ID

在 Microsoft 版本中也称为全局唯一标识符,通用唯一标识符是用于创建唯一 ID 的 128 位标签。

这些 ID 通常用于识别数据库中的实体,以唯一地记录个人身份。在这种情况下使用时,这些 ID 通常被称为数据库键。

如何在 Node JS 中生成唯一 ID

世界上任何人生成两个相似的 UUID 的可能性几乎为零。这就是为什么它们被称为普遍独特的原因。

互联网工程任务组提出了一份名为 RFC 的出版物,该出版物定义了一组标准,用于创建生成这些 UUID 以保持其在全球范围内的唯一性的算法。

有几个 Node js 模块用于在 Node JS 中创建 UUID。但是,最常用的包是 UUID 包。

我们可以使用下面的 npm 包安装程序命令安装 UUID 包。

npm install uuid

这个包可以与 Node js 8、10、12 和 14 一起使用,但它也是跨平台的,这意味着我们可以使用 ES6 syntaxCommonJS 来安全地生成加密的大量随机数。

现在,由于 UUID 包支持 RFC4122 版本 1、3、4 和 5 UUID,这意味着我们可以根据需要生成不同类型的 UUID。

版本 1 是基于时间的 UUID,它使用随机数、日期时间值和设备的 MAC 地址的组合来生成通用唯一 ID。

第 4 版 UUID 可能是最简单的 ID,因为它们是从字符 a 到 z 和 0 到 9 生成的。

另一方面,版本 3 和 5 UUID 使用预先存在的命名空间日期和名称数据来生成随机的字母数字 UUID。

使用 CommonJS 语法,我们可以生成 UUID 的版本 4 和版本 1,如下所示。

const {v4: uuidv4} = require('uuid');
const {v1: uuidv1} = require('uuid');
console.log(uuidv4());
console.log(uuidv1());

输出:

ddd3b16f-2b6c-4fef-9f21-aaa52d1f983c
69b42bc0-7a15-11ec-a689-5191cd2179b0

或者,我们可以使用 ES6 模块语法而不是 CommonJS,并且仍然生成任何版本的 UUID,如下所示。

请记住在 package.json 中设置 type: module 以使用此语法。

import {v1 as uuidv1, v4 as uuidv4} from 'uuid';

console.log(uuidv4());
console.log(uuidv1());

输出:

9cae2569-010e-4a69-867c-65601234e2a5
0b2567c0-7a17-11ec-9b81-19257147bda6

我们还可以使用从 Node js 的 4.17.0 版添加的加密模块生成 UUID。

在 Node js 的早期版本中,除了使用诸如 UUID 包之类的外部包之外,没有办法在本地生成 UUID。

使用这个模块,我们可以使用 randomUUID options 方法生成多达 128 个 RFC4122 版本 4 UUIDs,只需在我们的程序顶部简单地要求 crypto 模块。

默认情况下,Node js 将缓存足够的数据以使用此方法生成多达 128 个版本 4 UUID。但是,我们也可以通过将禁用 EntropyCache 的对象设置为 true 来生成不缓存的 UUID。

const crypto = require('crypto');
console.log(crypto.randomUUID());

输出:

7a2e09e9-4059-438d-89cf-c2badb76ed3c
作者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn