Sha256: 52bc6d25a33b484cf02c69ad8beabbf6de1b0bc683db54f38ed7f49a07e36e33

Contents?: true

Size: 1.49 KB

Versions: 44

Compression:

Stored size: 1.49 KB

Contents

module Ibandit
  module IBANSplitter
    def self.split(iban)
      {
        country_code:   country_code_from(iban),
        check_digits:   check_digits_from(iban),
        bank_code:      bank_code_from(iban),
        branch_code:    branch_code_from(iban),
        account_number: account_number_from(iban)
      }
    end

    ###################
    # Component parts #
    ###################

    def self.country_code_from(iban)
      return if iban.nil? || iban.empty?

      iban.slice(0, 2)
    end

    def self.check_digits_from(iban)
      return unless decomposable?(iban)

      iban.slice(2, 2)
    end

    def self.bank_code_from(iban)
      return unless decomposable?(iban)

      iban.slice(
        structure(iban)[:bank_code_position] - 1,
        structure(iban)[:bank_code_length]
      )
    end

    def self.branch_code_from(iban)
      unless decomposable?(iban) && structure(iban)[:branch_code_length] > 0
        return
      end

      iban.slice(
        structure(iban)[:branch_code_position] - 1,
        structure(iban)[:branch_code_length]
      )
    end

    def self.account_number_from(iban)
      return unless decomposable?(iban)

      iban.slice(
        structure(iban)[:account_number_position] - 1,
        structure(iban)[:account_number_length]
      )
    end

    def self.decomposable?(iban)
      structure(iban) && iban.length == structure(iban)[:total_length]
    end

    def self.structure(iban)
      Ibandit.structures[country_code_from(iban)]
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
ibandit-0.11.6 lib/ibandit/iban_splitter.rb
ibandit-0.11.5 lib/ibandit/iban_splitter.rb
ibandit-0.11.4 lib/ibandit/iban_splitter.rb
ibandit-0.11.3 lib/ibandit/iban_splitter.rb
ibandit-0.11.2 lib/ibandit/iban_splitter.rb
ibandit-0.11.1 lib/ibandit/iban_splitter.rb
ibandit-0.11.0 lib/ibandit/iban_splitter.rb
ibandit-0.10.1 lib/ibandit/iban_splitter.rb
ibandit-0.10.0 lib/ibandit/iban_splitter.rb
ibandit-0.9.1 lib/ibandit/iban_splitter.rb
ibandit-0.9.0 lib/ibandit/iban_splitter.rb
ibandit-0.8.8 lib/ibandit/iban_splitter.rb
ibandit-0.8.7 lib/ibandit/iban_splitter.rb
ibandit-0.8.6 lib/ibandit/iban_splitter.rb
ibandit-0.8.5 lib/ibandit/iban_splitter.rb
ibandit-0.8.4 lib/ibandit/iban_splitter.rb
ibandit-0.8.3 lib/ibandit/iban_splitter.rb
ibandit-0.8.2 lib/ibandit/iban_splitter.rb
ibandit-0.8.1 lib/ibandit/iban_splitter.rb
ibandit-0.8.0 lib/ibandit/iban_splitter.rb