Rails 3:生成唯一代码(优惠券)

时间:2010-12-29 22:01:21

标签: ruby-on-rails ruby rubygems ruby-on-rails-3

生成用作优惠券代码的唯一代码的最佳方法是什么?

感谢。

6 个答案:

答案 0 :(得分:37)

在Ruby的标准库中,SecureRandom为此:

SecureRandom.hex(3)

输出长度是指定长度输入的两倍。

答案 1 :(得分:7)

您想要的是生成GUID。见这里:

guid generator in ruby

答案 2 :(得分: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

答案 3 :(得分:3)

您也可以这样做:

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

但是,您必须与数据库进行比较以确保它尚未使用。

来自here

答案 4 :(得分:2)

如果您不想浪费与数据库进行比较(不是超级昂贵的操作),您可以保证Time始终是唯一的,因为它只发生一次

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

答案 5 :(得分:1)

注意:有a same question

最近我写了coupon-code gem,它做了完全相同的事情。该算法借鉴了Algorithm :: CouponCode CPAN模块。

优惠券代码不仅应该是唯一的,还应该易于阅读和打字,同时它仍然是安全的。尼尔的解释和解决方案很棒。这个宝石提供了一种方便的方法和奖励验证功能。

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