Подтвердить что ты не робот

Nodejs генерируют короткие уникальные буквенно-цифровые

Я хотел бы создать короткое уникальное буквенно-цифровое значение, которое будет использоваться в качестве кодов подтверждения для онлайн-покупок. Я просматриваю https://github.com/broofa/node-uuid, но их uuids слишком длинны, и я хочу, чтобы их было около 8 символов. Каким образом я могу достичь этого?

4b9b3361

Ответ 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}
});

Я уже ответил на подобный вопрос себе:

Сократить ObjectId в node.js и mongoose

Ответ 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