4

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

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

更新(为清楚起见):我之前应该说我已经尝试过使用base62模块,但这并不能解决我的问题,因为base62javascript 整数中的数字只能精确到 52 位,而 UUID 有 128 位。

4

4 回答 4

10

这是一个全面的答案:

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

受@Jonathan 先前评论的启发。

使用node-uuid生成 UUID,然后使用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)的模块和另一个用于 base62 UUID 生成的模块:uuid-base62

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

这是简单的解决方案。目前它不如 A 快,因为b62它要慢得多,但我打算用base-x.

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

于 2015-05-27T12:21:16.593 回答
2

更新:我最初指出的模块是将 62 基数转换为 10 基数,反之亦然,所以不会这样做。看起来原始海报正在创建自己的模块来执行此操作:https ://github.com/dmarcelino/b62

您可以使用一个 base62 模块。这是他们的示例代码:

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

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

于 2015-05-26T20:40:01.150 回答
0

安装包:

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())))
于 2021-01-03T01:26:10.507 回答
-1

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

于 2017-10-17T03:45:38.657 回答