如何在 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())))
我正在寻找在 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())))