module Clabe
Constants
- BANKS
- CITIES
- CLABE_WEIGHT_FACTOR_MAP
- ClabeValidation
- VERSION
Public Class Methods
validate(clabe)
click to toggle source
# File lib/clabe.rb, line 550 def self.validate(clabe) clabe_params = get_params(clabe) clabe_validation = ClabeValidation.new(false) clabe_validation[:errors] = [] unless clabe.length == 18 clabe_validation[:errors] << 'invalid length' end unless (clabe =~ /[^0-9]/).nil? clabe_validation[:errors] << 'invalid characters' end if clabe_params[:bank].nil? clabe_validation[:errors] << 'invalid bank' end if clabe_params[:city].nil? clabe_validation[:errors] << 'invalid city' end unless clabe_params[:checksum] == clabe_params[:real_checksum] clabe_validation[:errors] << 'must have a valid control digit' end unless clabe_validation.errors.empty? return clabe_validation end clabe_validation[:is_valid?] = true clabe_validation[:bank_code] = clabe_params[:bank_code] clabe_validation[:bank_tag] = clabe_params[:bank][:tag] clabe_validation[:bank_name] = clabe_params[:bank][:name] clabe_validation[:city] = clabe_params[:city] return clabe_validation end
Private Class Methods
compute_checksum(clabe)
click to toggle source
# File lib/clabe.rb, line 518 def self.compute_checksum(clabe) result = 0 clabe.split('')[0...17].each_with_index do |val, index| result += (val.to_i * CLABE_WEIGHT_FACTOR_MAP[index % 3]) % 10 end return ((10 - result % 10) % 10).to_s end
get_params(clabe)
click to toggle source
# File lib/clabe.rb, line 528 def self.get_params(clabe) bank_code = clabe[0...3] city_code = clabe[3...6] account = clabe[6...17] checksum = clabe[17...18] bank = BANKS[bank_code] city = CITIES[city_code] real_checksum = compute_checksum(clabe) return { bank_code: bank_code, city_code: city_code, account: account, checksum: checksum, bank: bank, city: city, real_checksum: real_checksum } end