Sha256: b674e8d30a19737896e0bff989e124e14746ae9f759608d6896d55ae525462db

Contents?: true

Size: 816 Bytes

Versions: 3

Compression:

Stored size: 816 Bytes

Contents

module BankValidator
  class Iban
    attr_accessor :value

    def initialize(iban)
      @value = iban
    end

    def valid?
      BankValidator::Iban.valid_format?(value) && BankValidator::Iban.valid_checksum?(value)
    end

    class << self
      def valid_format?(iban)
        iban =~ /[A-Z]{2}[a-zA-Z0-9]{14,}/ ? true : false
      end

      def valid_checksum?(iban)
        # Move first four characters to end of string
        dummy_iban = iban[4..-1] + iban[0..3]

        # Substitute all letters with integers
        checksum = dummy_iban.chars.map { |char| ((char =~ /[a-zA-Z]/).present?) ? (char.downcase.ord - 87).to_s : char }.join

        # Check if division by 97 yields a remainder of 1, in which case it could be a valid IBAN
        (checksum.to_i % 97) == 1
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bank-validator-0.3.2 lib/bank_validator/iban.rb
bank-validator-0.3.1 lib/bank_validator/iban.rb
bank-validator-0.3.0 lib/bank_validator/iban.rb