如何在 node.js 中生成 base62 UUID?

How to generate base62 UUIDs in node.js?

我正在寻找在 node.js 中生成 base62 UUID 的解决方案。我想避免使用 base64,因为我打算基于这些 UUID 和 =\-_(在某些实现中)等字符创建文件夹不是那么 human/filesystem 友好。

Base62 还具有比典型的 v4 UUID 更短的优势(在我的上下文中)。

UPDATE(为清楚起见):我应该早点说我已经尝试使用 base62 模块,但这并不能解决我的问题,因为 base62 接受数字 javascript 整数只能精确到 52 位,而 UUID 有 128。

UPDATE:我最初指出的模块用于将基数 62 的数字转换为基数 10,反之亦然,因此不会这样做。看起来原始发布者正在创建自己的模块来执行此操作:https://github.com/dmarcelino/b62

a base62 module 可以使用。这是他们的示例代码:

Base62 = require('base62')
Base62.encode(999)  // 'g7' 
Base62.decode('g7') // 999

模块可以用npm install base62安装。要将其作为 package.json 中的依赖项,请改用 npm install --save base62

这里有一个全面的答案:

解决方案 A:base-x + node-uuid

灵感来自@Jonathan 之前的评论。

使用node-uuid to generate the UUID and then encode it with base-x:

var buf = new Buffer(16);
var uuid = Uuid.v4(null, buf);
var uuidB62 = baseX.encode(uuid);
// -> 71jbvv7LfRKYp19gtRLtkn

base-x 非常快,因此这是性能最高的解决方案。

解决方案 B:uuid-base62

在了解 base-x 之前,我继续为 base62 编码创建了一个模块 (b62) and another for the base62 UUID generation: uuid-base62:

var uuidB62 = uuidBase62.v4();  // -> 2qY9COoAhfMrsH7mCyh86T

这是简洁的解决方案。 目前它没有 A 快,因为 b62 慢得多,但我打算用 base-x 代替它。

更新: uuid-base62 已更新为使用 base-x.

npm 安装 base62x

var base62x = require('base62x');

var encoded = base62x.encode('hello');
var decodedBuffer = base62x.decode(encoded);
var decodedString = base62x.decodeString(encoded);

Base62x.class.js 是这个问题的另一种选择。有关详细信息,请参阅 https://github.com/wadelau/Base62x , https://www.npmjs.com/package/base62x

安装包:

npm install uuid
npm install base-x

生成标识符:

const uuid = require('uuid')
const base62 = require('base-x')('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')

const id = base62.encode(Buffer.from(uuid.parse(uuid.v4())))