Sha256: ddaa1431bd19331d76bf6f1a26d1ae65ef705940ba2295ad24cb079c9ae3e5a8
Contents?: true
Size: 843 Bytes
Versions: 1
Compression:
Stored size: 843 Bytes
Contents
require 'active_model' class IbanValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) record_error(record, attribute, value) unless value =~ regexp && valid_iban?(value) end private def record_error(record, attribute, value) record.errors.add(attribute, (:invalid_iban || options[:message])) end def regexp /[A-Z]{2}[a-zA-Z0-9]{14,}/ end def valid_iban?(iban) # Move first four characters to end of string dummy_iban = iban.slice(4..-1) + iban.slice(0..3) # Substitute all letters with integers dummy_iban.split(//).each { |char| dummy_iban.gsub!(char, (char.downcase.ord - 87).to_s) if (char =~ /[a-zA-Z]/).present? } # Check if division by 97 yields a remainder of 1, in which case it could be a valid IBAN (dummy_iban.to_i % 97) == 1 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bank-validator-0.2.2 | lib/active_model/iban_validator.rb |