Module: Brcobranca::Calculo
- Defined in:
- lib/brcobranca/core_ext.rb
Overview
métodos auxiliares de cálculos
Instance Method Summary collapse
-
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
-
#modulo10 ⇒ Object
Método padrão para cálculo de módulo 10 segundo a BACEN.
-
#modulo11_2to9 ⇒ Object
Método padrão para cálculo de módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
-
#modulo11_9to2 ⇒ Object
Método padrão para cálculo de módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
-
#modulo11_9to2_10_como_x ⇒ Object
Retorna o dígito verificador de modulo 11(9-2) trocando retorno 10 por X.
-
#modulo11_9to2_10_como_zero ⇒ Object
Retorna o dígito verificador de modulo 11(9-2) trocando retorno 10 por 0.
- #modulo_10_banespa ⇒ Object
- #multiplicador(fatores) ⇒ Object
-
#soma_digitos ⇒ Object
Soma números inteiros positivos com 2 dígitos ou mais Retorna 0(zero) caso seja impossível.
Instance Method Details
#is_number? ⇒ Boolean
Verifica se String só contem caracteres numéricos.
109 110 111 |
# File 'lib/brcobranca/core_ext.rb', line 109 def is_number? self.to_s.empty? ? false : (self.to_s =~ (/\D/)).nil? end |
#modulo10 ⇒ Object
Método padrão para cálculo de módulo 10 segundo a BACEN.
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/brcobranca/core_ext.rb', line 114 def modulo10 valor_inicial = self.kind_of?(String) ? self : self.to_s raise ArgumentError, "Somente números" unless valor_inicial.numeric? total = 0 multiplicador = 2 valor_inicial.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 ⇒ Object
Método padrão para cálculo de módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN. Usado no DV do Código de Barras.
Retorna + nil + para todos os parametros que não forem String
Retorna + nil + para String em branco
144 145 146 147 148 149 |
# File 'lib/brcobranca/core_ext.rb', line 144 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 ⇒ Object
Método padrão para cálculo de módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN. Usado no DV do Nosso Numero, Agência e Cedente.
Retorna + nil + para todos os parametros que nao forem String
Retorna + nil + para String em branco
134 135 136 137 138 |
# File 'lib/brcobranca/core_ext.rb', line 134 def modulo11_9to2 total = self.multiplicador([9,8,7,6,5,4,3,2]) return (total % 11 ) end |
#modulo11_9to2_10_como_x ⇒ Object
Retorna o dígito verificador de modulo 11(9-2) trocando retorno 10 por X.
Usado por alguns bancos.
168 169 170 171 |
# File 'lib/brcobranca/core_ext.rb', line 168 def modulo11_9to2_10_como_x valor = self.modulo11_9to2 valor == 10 ? "X" : valor end |
#modulo11_9to2_10_como_zero ⇒ Object
Retorna o dígito verificador de modulo 11(9-2) trocando retorno 10 por 0.
Usado por alguns bancos.
175 176 177 178 |
# File 'lib/brcobranca/core_ext.rb', line 175 def modulo11_9to2_10_como_zero valor = self.modulo11_9to2 valor == 10 ? 0 : valor end |
#modulo_10_banespa ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/brcobranca/core_ext.rb', line 151 def modulo_10_banespa valor_inicial = self.kind_of?(String) ? self : self.to_s raise ArgumentError, "Somente números" unless valor_inicial.numeric? fatores = [7,3,1,9,7,3,1,9,7,3] total = 0 posicao = 0 valor_inicial.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) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/brcobranca/core_ext.rb', line 198 def multiplicador(fatores) valor_inicial = self.kind_of?(String) ? self : self.to_s raise ArgumentError, "Somente números" unless valor_inicial.numeric? total = 0 multiplicador_posicao = 0 valor_inicial.split(//).reverse!.each do |caracter| total += (caracter.to_i * fatores[multiplicador_posicao]) multiplicador_posicao = (multiplicador_posicao < (fatores.size - 1)) ? (multiplicador_posicao + 1) : 0 end total.to_i end |
#soma_digitos ⇒ Object
Soma números inteiros positivos com 2 dígitos ou mais Retorna 0(zero) caso seja impossível.
Ex. 1 = 1
Ex. 11 = (1+1) = 2
Ex. 13 = (1+3) = 4
185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/brcobranca/core_ext.rb', line 185 def soma_digitos valor_inicial = self.kind_of?(Fixnum) ? self : self.to_i return 0 if valor_inicial == 0 return valor_inicial if valor_inicial <= 9 valor_inicial = valor_inicial.to_s total = 0 0.upto(valor_inicial.size-1) {|digito| total += valor_inicial[digito,1].to_i } return total end |