niedziela, 6 grudnia 2009

Walidacja numeru IBAN (konta bankowego) w Ruby on Rails

Więcej na temat samego numeru i genezy algorytmu można znaleźć na wikipedi http://pl.wikipedia.org/wiki/International_Bank_Account_Number

validates_each(:iban) do |record, attr, value|
iban = value.to_s.gsub(" ", "")
unless iban =~ /\A(PL)?[0-9]{26}\Z/
record.errors.add(attr, :invalid)
else
iban = iban[2..27] if iban.size == 28 # skip PL, size: 26
iban << "2521" # size 30
iban = iban[2..29] + iban[0..1] # size 30
if iban.to_i % 97 != 1
record.errors.add(attr, :invalid)
end
end
end