Module: Brcobranca::Calculo
- Defined in:
- lib/brcobranca/calculo.rb
Overview
Métodos auxiliares de cálculos
Instance Method Summary collapse
-
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
-
#modulo10 ⇒ Integer
Calcula módulo 10 segundo a BACEN.
-
#modulo11_2to9 ⇒ Integer
Calcula módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
-
#modulo11_9to2 ⇒ Integer
Calcula módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
-
#modulo11_9to2_10_como_x ⇒ Integer, String
Calcula módulo 11 com multiplicaroes de 9 a 2 trocando retorno 10 por X.
-
#modulo11_9to2_10_como_zero ⇒ Integer
Calcula módulo 11 com multiplicaroes de 9 a 2 trocando retorno 10 por 0.
-
#modulo_10_banespa ⇒ Integer
Calcula módulo 10 do Banespa.
-
#multiplicador(fatores, &block) ⇒ Integer
Faz a multiplicação de um número pelos fatores passados como parâmetro.
-
#soma_digitos ⇒ Integer
Soma dígitos de números inteiros positivos com 2 dígitos ou mais.
Instance Method Details
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
81 82 83 |
# File 'lib/brcobranca/calculo.rb', line 81 def is_number? self.to_s.empty? ? false : (self.to_s =~ (/\D/)).nil? end |
#modulo10 ⇒ Integer
Calcula módulo 10 segundo a BACEN.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/brcobranca/calculo.rb', line 10 def modulo10 raise ArgumentError, "Número inválido" unless self.is_number? total = 0 multiplicador = 2 self.to_s.split(//).reverse!.each do |caracter| total += (caracter.to_i * multiplicador).soma_digitos multiplicador = multiplicador == 2 ? 1 : 2 end valor = (10 - (total % 10)) valor == 10 ? 0 : valor end |
#modulo11_2to9 ⇒ Integer
Calcula módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
55 56 57 58 59 60 |
# File 'lib/brcobranca/calculo.rb', line 55 def modulo11_2to9 total = self.multiplicador([2,3,4,5,6,7,8,9]) valor = (11 - (total % 11)) return [0,10,11].include?(valor) ? 1 : valor end |
#modulo11_9to2 ⇒ Integer
Calcula módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
46 47 48 49 50 |
# File 'lib/brcobranca/calculo.rb', line 46 def modulo11_9to2 total = self.multiplicador([9,8,7,6,5,4,3,2]) return (total % 11 ) end |
#modulo11_9to2_10_como_x ⇒ Integer, String
Calcula módulo 11 com multiplicaroes de 9 a 2 trocando retorno 10 por X.
65 66 67 68 |
# File 'lib/brcobranca/calculo.rb', line 65 def modulo11_9to2_10_como_x valor = self.modulo11_9to2 valor == 10 ? "X" : valor end |
#modulo11_9to2_10_como_zero ⇒ Integer
Calcula módulo 11 com multiplicaroes de 9 a 2 trocando retorno 10 por 0.
73 74 75 76 |
# File 'lib/brcobranca/calculo.rb', line 73 def modulo11_9to2_10_como_zero valor = self.modulo11_9to2 valor == 10 ? 0 : valor end |
#modulo_10_banespa ⇒ Integer
Calcula módulo 10 do Banespa.
29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/brcobranca/calculo.rb', line 29 def modulo_10_banespa raise ArgumentError, "Número inválido" unless self.is_number? fatores = [7,3,1,9,7,3,1,9,7,3] total = 0 posicao = 0 self.to_s.split(//).each do |digito| total += (digito.to_i * fatores[posicao]).to_s.split(//)[-1].to_i posicao = (posicao < (fatores.size - 1)) ? (posicao + 1) : 0 end dv = 10 - total.to_s.split(//)[-1].to_i dv == 10 ? 0 : dv end |
#multiplicador(fatores, &block) ⇒ Integer
Faz a multiplicação de um número pelos fatores passados como parâmetro.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/brcobranca/calculo.rb', line 110 def multiplicador(fatores, &block) raise ArgumentError, "Número inválido" unless self.is_number? total = 0 multiplicador_posicao = 0 self.to_s.split(//).reverse!.each do |caracter| fator = fatores[multiplicador_posicao] total += if block_given? yield(caracter, fator) else (caracter.to_i * fator) end multiplicador_posicao = (multiplicador_posicao < (fatores.size - 1)) ? (multiplicador_posicao + 1) : 0 end total end |
#soma_digitos ⇒ Integer
Soma dígitos de números inteiros positivos com 2 dígitos ou mais.
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/brcobranca/calculo.rb', line 92 def soma_digitos total = case self.to_i when (0..9) self else numero = self.to_s total = 0 0.upto(numero.size-1) {|digito| total += numero[digito,1].to_i } total end total.to_i end |