我正在尝试与任何国家/地区iban代码一起执行iban验证。我从构建代码的stackoverflow获得了一些帮助,但仍然存在一些问题,我不知道它在哪里。Ruby on Rails模型文件中的IBAN验证
总是我得到'这不是有效的IBAN'错误消息。但有时候我尝试了正确的iban代码作为定义的国家。
请问有没有人帮我做这个验证的代码?
的代码是在这里:
class BankAccount < ActiveRecord::Base
belongs_to :user
validates :bank_name, presence: true
validate :iban, :valid_iban?, presence: true
private
def valid_iban?
ibans = iban.upcase.scan(/\w/).join
ibans = ibans.gsub(/_/, '')
iban_length = ibans.length
country = ibans.scan(/\A../).join
length_correct_for_country = true
case country
when "IE"
if iban_length == 22
length_correct_for_country = true
else
length_correct_for_country = false
end
when "AL"
if iban_length == 28
length_correct_for_country = true
else
length_correct_for_country = false
end
when "TR"
if iban_length == 26
length_correct_for_country = true
else
length_correct_for_country = false
end
when "GB"
if iban_length == 22
length_correct_for_country = true
else
length_correct_for_country = false
end
when "VG"
if iban_length == 24
length_correct_for_country = true
else
length_correct_for_country = false
end
end
first_four_characters = ibans.slice!(0..3)
reordered_number = ibans + first_four_characters
letters_removed = []
reordered_number.scan(/./) do |character|
case character
when "A"
letters_removed << 10
when "9"
letters_removed <<9
end
end
letters_removed = letters_removed.join.to_i
remainder = letters_removed % 97
if remainder == 1 && length_correct_for_country
else
remainder = remainder.to_s
errors.add(:iban, " That is not a valid IBAN. The IBAN that is being supplied")
end
end
end
它应该是'验证:valid_iban'和'验证:iban,presence:true'两个独立的验证,你应该传递一个方法来验证。 – Surya 2014-10-09 09:27:50
我刚刚做到了。但问题是一样的。我认为它在验证码 – 2014-10-09 09:37:42
因此,您的条件:'余额== 1 && length_correct_for_country'总是被评估为false,然后检查您的逻辑是否正确。 – Surya 2014-10-09 09:41:30