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