Rails 3: Создание уникальных кодов (купонов)

Какой лучший способ генерировать уникальные коды для использования в качестве кодов купонов?

Спасибо.

Ответы

Ответ 1

Вы также можете сделать что-то подобное:

chars = ('a'..'z').to_a + ('A'..'Z').to_a
def String.random_alphanumeric(size=16)
    (0...size).collect { chars[Kernel.rand(chars.length)] }.join
end

Но тогда вам придется сравнивать с базой данных, чтобы убедиться, что она еще не используется.

Из здесь.

Ответ 2

В стандартной библиотеке Ruby есть SecureRandom для этого:

SecureRandom.hex(3)

Длина вывода вдвое больше того, что указано в задании длины.

Ответ 4

Возможно, попробуйте это, похоже, больше доказательств, чем просто генерирование случайного ключа. Они говорят: генератор UUID для создания универсально уникальных идентификаторов на основе RFC 4122 (http://www.ietf.org/rfc/rfc4122.txt). http://rubygems.org/gems/uuid

gem install uuid
cd /myproject/path
uuid-setup

В вашем коде

require_gem 'uuid'
my_unique_id_var = UUID.new

Ссылка: http://railsforum.com/viewtopic.php?id=12616#p44545

Ответ 5

Если вы не хотите тратить время на сравнение с базой данных (не очень дорогостоящая операция), вы можете гарантировать, что время всегда уникально, потому что оно встречается только один раз

md5(Time.now.to_i.to_s+Time.now.usec.to_s)

Ответ 6

Примечание: есть тот же вопрос

Недавно я написал драгоценный камень купонного кода, который делает то же самое. Алгоритм, заимствованный из модуля CPAN модуля Algorithm:: CouponCode.

Код купона должен быть не только уникальным, но и легко читаемым и типом, пока он еще безопасен. Объяснение и решение Нила замечательно. Этот камень обеспечивает удобный способ сделать это и функцию проверки бонуса.

>> require 'coupon_code'
>> code = CouponCode.generate
=> "1K7Q-CTFM-LMTC"
>> CouponCode.validate(code)
=> "1K7Q-CTFM-LMTC"
>> CouponCode.validate('1K7Q-CTFM-LMTO') # Invalid code
=> nil