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)
Длина вывода вдвое больше того, что указано в задании длины.
Ответ 3
Вы хотите создать GUID. См. Здесь:
guid generator в рубине
Ответ 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