Class: BrBoleto::Calculos::LinhaDigitavel

Inherits:
String
  • Object
show all
Defined in:
lib/br_boleto/calculos/linha_digitavel.rb

Overview

Representação numérica do código de barras, mais conhecida como linha digitável! :p

A representação numérica do código de barras é composta, por cinco campos. Sendo os três primeiros campos, amarrados por DAC’s (dígitos verificadores), todos calculados pelo módulo 10.

OBS.: Para mais detalhes deste cálculo, veja a descrição em Modulo10.

Linha Digitável

A linha digitável contêm exatamente 47 posições nessa sequência:

 _____________________________________________________________________________________________________________
|Campo | Posi

Examples:


LinhaDigitavel.new('34196166700000123451091234567880057123457000')
# => '34191.09123 34567.880058 71234.570001 6 16670000012345'

LinhaDigitavel.new('99991101200000350007772130530150081897500000')
# => '99997.77213 30530.150082 18975.000003 1 10120000035000'

LinhaDigitavel.new('39998100100000311551111122222500546666666001')
# => '39991.11119 22222.500542 66666.660015 8 10010000031155'

Returns:

  • (String)

    Contêm a representação numérica do código de barras formatado com pontos e espaços.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(codigo_de_barras) ⇒ String

Representação numérica do código de barras

Examples:


LinhaDigitavel.new('34196166700000123451091234567880057123457000')
# => '34191.09123 34567.880058 71234.570001 6 16670000012345'

LinhaDigitavel.new('99991101200000350007772130530150081897500000')
# => '99997.77213 30530.150082 18975.000003 1 10120000035000'

LinhaDigitavel.new('39998100100000311551111122222500546666666001')
# => '39991.11119 22222.500542 66666.660015 8 10010000031155'

# Retorna uma String vazia caso o código de barras esteja vazio.
LinhaDigitavel.new('')
# => ''

# Retorna uma String vazia caso o código de barras esteja vazio.
LinhaDigitavel.new(nil)
# => ''

# Retorna uma String vazia caso o código de barras seja menor que 44 posições.
LinhaDigitavel.new('123456789')
# => ''

# Retorna uma String vazia caso o código de barras seja maior que 44 posições.
LinhaDigitavel.new('12345678901234567890123456789012345678901234567890')
# => ''

Parameters:

  • codigo_de_barras (String)

    Código de Barras de 44 posições



85
86
87
88
89
90
91
92
93
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 85

def initialize(codigo_de_barras)
  @codigo_de_barras  = codigo_de_barras.to_s

  if @codigo_de_barras.present? and @codigo_de_barras.size == 44
    super(representacao_numerica_do_codigo_de_barras)
  else
    super('')
  end
end

Instance Attribute Details

#codigo_de_barrasObject (readonly)

Returns the value of attribute codigo_de_barras.



52
53
54
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 52

def codigo_de_barras
  @codigo_de_barras
end

Instance Method Details

#primeiro_campoString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna o primeiro campo da linha digitável com seu respectivo dígito verificador.

Returns:

  • (String)


107
108
109
110
111
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 107

def primeiro_campo
  primeiro_campo_sem_digito = "#{codigo_de_barras[0..3]}#{codigo_de_barras[19..23]}"
  digito_verificador        = Modulo10.new(primeiro_campo_sem_digito)
  "#{primeiro_campo_sem_digito}#{digito_verificador}".gsub(/^(.{5})(.{5})/, '\1.\2')
end

#quarto_campoString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna o dígito verificador do código de barras (posição 5 do código de barras)

Returns:

  • (String)


143
144
145
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 143

def quarto_campo
  "#{codigo_de_barras[4]}"
end

#quinto_campoString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna o quinto e último campo da linha digitável.

Returns:

  • (String)


153
154
155
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 153

def quinto_campo
  "#{codigo_de_barras[5..8]}#{codigo_de_barras[9..18]}"
end

#representacao_numerica_do_codigo_de_barrasString

Returns Retorna todos os campos da linha digitável pegando as posições exatas do código de barras.

Returns:

  • (String)

    Retorna todos os campos da linha digitável pegando as posições exatas do código de barras.



97
98
99
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 97

def representacao_numerica_do_codigo_de_barras
  "#{primeiro_campo} #{segundo_campo} #{terceiro_campo} #{quarto_campo} #{quinto_campo}"
end

#segundo_campoString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna o segundo campo da linha digitável com seu respectivo dígito verificador.

Returns:

  • (String)


119
120
121
122
123
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 119

def segundo_campo
  segundo_campo_sem_digito = "#{codigo_de_barras[24..33]}"
  digito_verificador       = Modulo10.new(segundo_campo_sem_digito)
  "#{segundo_campo_sem_digito}#{digito_verificador}".gsub(/(.{5})(.{6})/, '\1.\2')
end

#terceiro_campoString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna o terceiro campo da linha digitável com seu respectivo dígito verificador.

Returns:

  • (String)


131
132
133
134
135
# File 'lib/br_boleto/calculos/linha_digitavel.rb', line 131

def terceiro_campo
  terceiro_campo_sem_digito = "#{codigo_de_barras[34..46]}"
  digito_verificador        = Modulo10.new(terceiro_campo_sem_digito)
  "#{terceiro_campo_sem_digito}#{digito_verificador}".gsub(/(.{5})(.{6})/, '\1.\2')
end