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

vfh0ocws  于 2023-01-16  发布在  Node.js
关注(0)|答案(5)|浏览(292)

我正在寻找一种在node.js中生成base 62 UUID的解决方案。我希望避免使用base64,因为我打算基于这些UUID创建文件夹,而像=\-_(在某些实现中)这样的字符对人/文件系统来说并不友好。
Base 62还具有比典型的v4 UUID短的优点(在我的上下文中)。

更新(为清楚起见):我应该早些时候说,我已经尝试使用base62模块,但这并没有解决我的问题,因为base62在javascript中接受数字,整数的精确度只有52位,而UUID有128位。

5fjcxozz

5fjcxozz1#

以下是一个全面的答案:

溶液A:x1个月1x + x1个月1n1x

  • 灵感来自于@乔纳森之前的评论。*

使用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之前,我创建了一个base 62编码模块(b62)和另一个base 62 UUID生成模块:uuid-base62

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

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

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

baubqpgj

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

weylhg0b

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())))
oipij1gg

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);
}
wswtfjt7

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

相关问题