生成用作优惠券代码的唯一代码的最佳方法是什么?
感谢。
答案 0 :(得分:37)
在Ruby的标准库中,SecureRandom
为此:
SecureRandom.hex(3)
输出长度是指定长度输入的两倍。
答案 1 :(得分:7)
您想要的是生成GUID。见这里:
答案 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
答案 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