Sha256: 3526593083ff275d77f1fabd1144c7bf05ead871a433d5c99f4c2906f43f0cd1

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module BicValidation
  class Bic

    def initialize(code)
      @code = code.strip.upcase
    end

    def of_valid_length?
      [8, 11].include? @code.length
    end

    def of_valid_format?
      @code =~ format
    end

    def has_valid_country_code?
      country_codes.include? country
    end

    def has_valid_branch_code?
      # WTF? http://de.wikipedia.org/wiki/ISO_9362
      country[0] =~ /[^01]/ && country[1] =~ /[^O]/
    end

    def valid?
      of_valid_length? and
        of_valid_format? and
        has_valid_country_code?
    end

    def bank
      match[1]
    end

    def country
      match[2]
    end

    def location
      match[3]
    end

    def branch
      match[4]
    end

    private

    def format
      /([A-Z]{4})([A-Z]{2})([0-9A-Z]{2})([0-9A-Z]{3})?/
    end

    def match
      format.match(@code)
    end

    def country_codes
      # http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
      YAML.load(File.read(File.dirname(__FILE__) + '/country_codes.yml'))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bic_validation-0.0.2 lib/bic_validation/bic.rb