我正在寻找一种在node.js中生成base 62 UUID的解决方案。我希望避免使用base64,因为我打算基于这些UUID创建文件夹,而像=、\、-、_(在某些实现中)这样的字符对人/文件系统来说并不友好。Base 62还具有比典型的v4 UUID短的优点(在我的上下文中)。
=
\
-
_
更新(为清楚起见):我应该早些时候说,我已经尝试使用base62模块,但这并没有解决我的问题,因为base62在javascript中接受数字,整数的精确度只有52位,而UUID有128位。
base62
5fjcxozz1#
以下是一个全面的答案:
使用node-uuid生成UUID,然后使用base-x对其进行编码:
var buf = new Buffer(16); var uuid = Uuid.v4(null, buf); var uuidB62 = baseX.encode(uuid); // -> 71jbvv7LfRKYp19gtRLtkn
base-x速度非常快,因此这是性能最高的解决方案。
base-x
uuid-base62
在了解base-x之前,我创建了一个base 62编码模块(b62)和另一个base 62 UUID生成模块:uuid-base62:
var uuidB62 = uuidBase62.v4(); // -> 2qY9COoAhfMrsH7mCyh86T
这是一个简单的解决方案。目前它没有A快,因为b62慢得多,但我打算用base-x代替它。
b62
更新:uuid-base62已更新为使用base-x。
baubqpgj2#
更新:我最初指出的模块是用于将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。
npm install base62
package.json
npm install --save base62
weylhg0b3#
安装软件包:
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())))
oipij1gg4#
以下是针对使用Node.js 16+且仅将base-x作为依赖项的用户的解决方案:
const crypto = require('crypto'); const BASE62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; const base62 = require('base-x')(BASE62); function generateBase62UUID() { const uuid = crypto.randomUUID(); const buf = Buffer.from(uuid, 'utf-8'); return base62.encode(buf); }
wswtfjt75#
npm安装基础62x
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。
5条答案
按热度按时间5fjcxozz1#
以下是一个全面的答案:
溶液A:x1个月1x + x1个月1n1x
使用node-uuid生成UUID,然后使用base-x对其进行编码:
base-x
速度非常快,因此这是性能最高的解决方案。溶液B:
uuid-base62
在了解
base-x
之前,我创建了一个base 62编码模块(b62)和另一个base 62 UUID生成模块:uuid-base62:这是一个简单的解决方案。目前它没有A快,因为
b62
慢得多,但我打算用base-x
代替它。更新:
uuid-base62
已更新为使用base-x
。baubqpgj2#
更新:我最初指出的模块是用于将62进制的数字转换为10进制的数字,反之亦然,所以这是行不通的。看起来楼主正在创建自己的模块来做这件事:https://github.com/dmarcelino/b62
有a base62 module可以使用,下面是它们的示例代码:
该模块可以与
npm install base62
一起安装。要将其作为package.json
中的依赖项,请改用npm install --save base62
。weylhg0b3#
安装软件包:
生成标识符:
oipij1gg4#
以下是针对使用Node.js 16+且仅将
base-x
作为依赖项的用户的解决方案:wswtfjt75#
npm安装基础62x
Base62x.class.js是此问题的另一个选项。有关详细信息,请参见https://github.com/wadelau/Base62x、https://www.npmjs.com/package/base62x。