我正在使用Github的Luhn lib。 Luhn课程有更多的方法,但我只是在"生成"和"有效吗?"方法
m = Luhn.generate(9) # generates a random number like [123456789] or [098765432]
Luhn.valid?(m) # returns true or false based on Luhn checksum passing
但我不希望生成的号码以" 0"开头。
所以如何输入我的红宝石脚本:
"0"
开头的生成号码。 m[0]
为非零。valid?()
:如果为false,则生成另一个非零数字,直到为真。 答案 0 :(得分:1)
这对你有用吗? (非常基本的递归)
require 'luhn'
def generate_non_zero_luhn(size=9)
m = Luhn.generate(size)
m[0] != "0" && Luhn.valid?(m) ? m : generate_non_zero_luhn(size)
end
示例输出
10.times.map { generate_non_zero_luhn }
#=> ["582428355", "353646136", "821379013", "818135220", "696652767",
"934766437", "885229401", "226319044", "682121645", "688197078"]
虽然我认为不需要进行有效性检查,因为Luhn
正在生成数字,所以它始终有效。 e.g。
1_000_000.times.map { Luhn.valid?(Luhn.generate(9))}.any?{|val| !val}
#=> false
那么方法就可以成为
def generate_non_zero_luhn(size=9)
m = Luhn.generate(size)
m[0] != "0" ? m : generate_non_zero_luhn(size)
end