Я хотел бы создать короткое уникальное буквенно-цифровое значение, которое будет использоваться в качестве кодов подтверждения для онлайн-покупок. Я просматриваю https://github.com/broofa/node-uuid, но их uuids слишком длинны, и я хочу, чтобы их было около 8 символов. Каким образом я могу достичь этого?
Nodejs генерируют короткие уникальные буквенно-цифровые
Ответ 1
10/23/15: см. также ответ на хешиды!
Вы можете заимствовать из модели сокращения URL-адресов и сделать что-то вроде этого:
(100000000000).toString(36);
// produces 19xtf1ts
(200000000000).toString(36);
// produces 2jvmu3nk
Просто увеличивайте число, чтобы сохранить его уникальным:
function(uniqueIndex) {
return uniqueIndex.toString(36);
}
Примечание, что это действительно полезно только для служб "одного экземпляра", которые не упускают определенной предсказуемости в способе, которым это упорядочено (через базовый прирост). Если вам нужно действительно уникальное значение для нескольких экземпляров приложений/БД, вы должны действительно рассмотреть более полнофункциональный вариант для некоторых комментариев.
Ответ 2
Немного поздно на этом, но похоже, что хешиды будут работать очень хорошо для этого сценария.
https://github.com/ivanakimov/hashids.node.js
hashids (Идентификатор Hash) создает короткие, уникальные, дешифруемые хэши из целых чисел без знака
var Hashids = require('hashids'),
hashids = new Hashids('this is my salt');
var hash = hashids.encrypt(12345);
// hash is now 'ryBo'
var numbers = hashids.decrypt('ryBo');
// numbers is now [ 12345 ]
Если вы хотите указать ~ 8 символов, которые вы можете сделать, следующее, которое требует минимум 8 символов.
hashids = new Hashids("this is my salt", 8);
то это:
hash = hashids.encrypt(1);
// hash is now 'b9iLXiAa'
Принятый ответ был бы предсказуемым/допустимым, это решение должно быть уникальным и непредсказуемым.
Ответ 3
Установите модуль shortId (https://www.npmjs.com/package/shortid). По умолчанию shortid генерирует 7-14 URL-символов: A-Z, a-z, 0-9, _-, но вы можете заменить - и _ другими символами, если хотите. Теперь вам нужно как-то приклеить это shortId к вашим объектам, когда они будут сохранены в базе данных. Лучший способ - вставить их в схему следующим образом:
var shortId = require('shortid');
var PurchaseConfirmationSchema = mongoose.Schema({
/* _id will be added automatically by mongoose */
shortId: {type: String, unique: true, default: shortId.generate}, /* WE SHOULD ADD THIS */
name: {type: String},
address: {type: String}
});
Я уже ответил на подобный вопрос себе:
Ответ 4
С этой целью я написал модуль, который может это сделать и все больше. Посмотрите на свою страницу: id-shorter
Ответ 5
Если каждая онлайн-покупка связана с уникальным URL-адресом, вы можете использовать бэкэнд простой-короткий пакет, который не требуют подключения к базе данных или веб-служб:
var shorten=require('simple-short');
shorten.conf({length:8}); // Default is 4.
code1=shorten('http://store.com/purchase1');
code2=shorten('http://store.com/purchase2');
//.. so on