Module: Brcobranca::Calculo
- Defined in:
- lib/brcobranca/calculo.rb
Overview
Métodos auxiliares de cálculos
Instance Method Summary collapse
-
#duplo_digito ⇒ String
Calcula duplo dígito com modulo 10 e 11.
-
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
-
#modulo10 ⇒ Integer
Calcula módulo 10 segundo a BACEN.
-
#modulo11(options = {}, &_block) ⇒ Integer
Calcula o módulo 11 segundo a BACEN.
-
#multiplicador(options = {}, &_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
#duplo_digito ⇒ String
Calcula duplo dígito com modulo 10 e 11
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/brcobranca/calculo.rb', line 91 def duplo_digito raise ArgumentError, 'Número inválido' unless is_number? digito_1 = modulo10 digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) do |total| (total < 11 ? total : total % 11) end while digito_2 == 1 digito_1 = if digito_1 == 9 0 else digito_1 + 1 end digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) do |total| (total < 11 ? total : total % 11) end end digito_2 = 11 - digito_2 if digito_2 != 0 "#{digito_1}#{digito_2}" end |
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
47 48 49 |
# File 'lib/brcobranca/calculo.rb', line 47 def is_number? to_s.empty? ? false : (to_s =~ /\D/).nil? end |
#modulo10 ⇒ Integer
Calcula módulo 10 segundo a BACEN.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/brcobranca/calculo.rb', line 12 def modulo10 raise ArgumentError, 'Número inválido' unless is_number? total = 0 multiplicador = 2 to_s.chars.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(options = {}, &_block) ⇒ Integer
Calcula o módulo 11 segundo a BACEN
34 35 36 37 38 39 40 41 42 |
# File 'lib/brcobranca/calculo.rb', line 34 def modulo11( = {}, &_block) [:mapeamento] ||= {} [:multiplicador] ||= [9, 8, 7, 6, 5, 4, 3, 2] total = multiplicador(fatores: [:multiplicador], reverse: [:reverse]) valor = _block ? yield(total) : (total % 11) [:mapeamento][valor] || valor end |
#multiplicador(options = {}, &_block) ⇒ Integer
Faz a multiplicação de um número pelos fatores passados como parâmetro.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/brcobranca/calculo.rb', line 70 def multiplicador( = {}, &_block) raise ArgumentError, 'Número inválido' unless is_number? raise ArgumentError, 'Fatores não podem estar em branco' unless [:fatores] total = 0 multiplicador_posicao = 0 fatores = [:fatores] numeros = [:reverse].nil? ? to_s.chars.reverse! : to_s.chars numeros.each do |caracter| fator = fatores[multiplicador_posicao] total += _block ? yield(caracter, fator) : (caracter.to_i * fator) 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.
59 60 61 62 63 |
# File 'lib/brcobranca/calculo.rb', line 59 def soma_digitos total = to_i total -= 9 if total > 9 total end |