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

时间:2015-05-26 20:28:41

标签: javascript node.js uuid base62

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

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

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

4 个答案:

答案 0 :(得分:6)

以下是一个全面的答案:

解决方案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

这是 no frills 解决方案。 目前它没有A那么快,因为b62慢得多,但我打算用base-x替换它。

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

答案 1 :(得分:2)

更新:我最初指出的模块是将基数为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

答案 2 :(得分: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())))

答案 3 :(得分:-1)

npm install 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/Base62xhttps://www.npmjs.com/package/base62x