Как сгенерировать base62 UUID в node.js?

Я ищу решение для генерации UUID base62 в node.js. Я бы хотел избежать base64, поскольку я намерен создавать папки на основе этих UUID и таких символов, как =, \, -, _ (как в некоторых реализациях) не настолько удобны для человека / файловой системы.

Base62 также имеет преимущество (в моем контексте) в том, что он короче, чем типичный UUID v4.

ОБНОВЛЕНИЕ (для ясности): я должен был сказать ранее, что я уже пытался использовать base62 модуль, но это не решает мою проблему, так как base62 принимает числа в javascript целые числа точны только до 52 бит, в то время как UUID имеют 128.

5 ответов

Решение

Вот исчерпывающий ответ:

Решение А: 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 очень быстро, так что это самое эффективное решение.

Решение Б: uuid-base62

Прежде чем узнать о base-x Я пошел дальше и создал модуль для кодировки base62 ( b62) и другой для генерации UUID base62: uuid-base62:

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

Это решение без излишеств. В настоящее время это не так быстро, как с b62 намного медленнее, но я собираюсь заменить его base-x,

ОБНОВИТЬ: uuid-base62 был обновлен для использования base-x,

ОБНОВЛЕНИЕ: модуль, который я первоначально указал, для преобразования чисел основания 62 в основание 10 и наоборот, так что это не будет делать. Похоже, оригинальный постер создает свой собственный модуль для этого: https://github.com/dmarcelino/b62

Существует модуль base 62, который вы можете использовать. Вот их пример кода:

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

Модуль может быть установлен с npm install base62, Иметь это как зависимость в вашем package.jsonиспользовать npm install --save base62 вместо.

Вот решение для тех, кто использует 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);
}

Установить пакеты:

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

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 для получения дополнительной информации.

Другие вопросы по тегам