Class: BoletoBancario::Calculos::Modulo10

Inherits:
String
  • Object
show all
Defined in:
lib/boleto_bancario/calculos/modulo10.rb

Overview

Cálculo do Modulo 10

Passos

1) Multiplica-se cada algarismo do campo pela seqüência de multiplicadores 2, 1, 2, 1, 2, 1 …, posicionados da direita para a esquerda.

2) Some individualmente, os algarismos dos resultados dos produtos, obtendo-se o total (N).

3) Divida o total encontrado (N) por 10, e determine o resto da divisão como MOD 10 (N).

4) Encontre o DAC através da seguinte expressão:

DAC = 10 - Mod 10 (n)

OBS.: Se o resultado do passo 4 for 10, considere o DAC = 0.

Exemplos

Considerando-se a seguinte representação numérica ‘12345’.

1) Multiplicando a seqüência de multiplicadores:

1     2     3     4     5
*     *     *     *     *  ===> Multiplicação.
2     1     2     1     2

2) Some, individualmente:

2  +  2  +  6  +  4   + 1 + 0 (Veja a observação abaixo explicando o '1' + '0').
# => 15

OBS.:: Resultado da soma que possua 2 digitos deve somar cada dígito. Exemplos: 10 -> 1 + 0. 11 -> 1 + 1, 28 -> 2 + 8, etc.

3) Divida o total encontrado por 10, a fim de determinar o resto da divisão:

15 % 10
# => 5

4) Calculando o DAC:

10 - 5
# => 5 =======> Resultado final retornado.

Instance Method Summary collapse

Constructor Details

#initialize(number) ⇒ String

Examples:


BoletoBancario::Calculos::Modulo10.new(1233)
# => "6"

BoletoBancario::Calculos::Modulo10.new(4411)
# => "5"

BoletoBancario::Calculos::Modulo10.new('9000')
# => "1"

BoletoBancario::Calculos::Modulo10.new('6789')
# => "2"

Parameters:

  • number (String ou Integer)

    (Corresponde ao número a ser calculado pelo Módulo 10)



65
66
67
68
# File 'lib/boleto_bancario/calculos/modulo10.rb', line 65

def initialize(number)
  @number  = number
  super(calculate.to_s)
end

Instance Method Details

#calculateString

Returns Resultado final do cálculo do módulo 10.

Returns:

  • (String)

    Resultado final do cálculo do módulo 10.



72
73
74
75
76
77
78
79
80
# File 'lib/boleto_bancario/calculos/modulo10.rb', line 72

def calculate
  sum_total = FatoresDeMultiplicacao.new(@number, fatores: [2, 1]).collect do |result_of_each_sum|
    Digitos.new(result_of_each_sum).sum
  end.sum
  total = 10 - (sum_total % 10)

  return 0 if total.equal?(10)
  total
end