Примечание: есть тот же вопрос
Недавно я написал gem купонного кода , который делает то же самое.Алгоритм заимствован из 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