Ontem tive que pagar um boleto bancário com data de vencimento expirada (sim, atrasei mesmo!!). E eu me recuso a ir à uma agência pra pagar essas coisas. Como a merda da TVA não gera um novo boleto pela internet, burlei mesmo o sistema de código de barras. Aííí resolvi explicar aqui como se faz isso, caso alguém precise fazer isso também.

No caminho, vou explicar bem de leve algumas coisas sobre o código de barras e sobre boleto bancário. Para os nerds mais curioses, no final, vou explicar mandar o script de geração e validação .. ;] MUITO TENSO

 Aqui esta a linha digitável do boleto (representação do código de barras) que eu usei ontem:
Código de Barras da TVA

A Estrutura da linha digitável é a seguinte:

BBB M L . LLLL d . LLLLL . LLLLL d LLLLL . LLLLL d . D . VVVVVVVVVVVVVV

B = banco
M = moeda (real = 9)
L = campo livre
d = dígito verificador de campo
D = dígito verificador geral
V = valor e vencimento

A linha digitável de qualquer boleto bancário é composto por 5 grupos. Suas respectivas descrições:

Grupo 1: as posições de 1 a 3 refere-se ao código da agência, neste exemplo 237, a quarta posição refere-se a moeda (9 para o real) as próximas cinco posições são os primeiros dígitos do campo livre, mais um dígito verificador de campo.
Grupo 2: é composto pelas posições de 6 a 15 do campo livre e um dígito verificador de campo.
Grupo 3: composto pelas posições de 16 a 25 do campo livre e um dígito verificador de campo.
Grupo 4: dígito verificador geral da linha digitável (D).
Grupo 5: composto pelo "fator de vencimento" (F.V.) com quatro posições (ESSA É A PARTE MAIS IMPORTANTE DA NOSSA JOGADINHA) e o valor nominal do boleto, sem vígulas. Torna-se necessário a inclusão de zeros entre os dois para compor as quatorze posições.

Essa é a informação básica pra nossa sacadinha. Bom, voltando ... sua conta venceu e você não quer ir até a agência para fazer o pagamento, e o bankline não aceita o pagamento por causa da data (isso só vai acontecer quando o fator de vendimento não for ZERO). O fator de vencimento (quatro primeiros números do grupo 5) é obtido pela diferença entre a Data Base (07/10/1997) e a data de vencimento do título.

Nessa conta que coloquei como exemplo a data de vencimento era 26/01/2011 e o F.V. era 4859 e o dígito verificador era 1. Eu estava pagando a conta dia 01/02/2011, por isso mudei o F.V. para 4865 ... simple assim: 6 dias pra frente, somei 6 !!

A única coisa que precisa ser feita agora é acerta o dígito verificador (o campo 4, sozinho ali). Mas sérião, nem precisa de toda teoria pra isso... Só um dígito então varia de 0 a 9, você vai errar no máximo 9 vezes amigão!! Isso mesmo: tenta 0 >> erro >> volta >> tenta 1 >> erro >> volta >> até acertar (no meu caso foi 3).

Pronto, código aceito e conta paga. Só preste atenção no valor, juros e tals......

:: O FernandohRosa montou um esqueminha bem legal, depois desse post, para cálcular o DV pra galérê toda ae --> automãtico


PARTE NERD ::..

Se algum curioso quiser saber como funcionam os dígitos de verificação, aqui vai a regra e a codificação em Python (não consegui validar e testar todos os scripts, mas já da pra ter uma noção da coisa), pela ordem...

O nosso número segue os passos:

  1. Inverta os valores do campo e inicialize um fator multiplicativo com 2.
  2. Multiplique o valor do dígito do campo pelo fator multiplicativo.
  3. Caso o fator multiplicativo for maior que 9, inicialize-o com 2.
  4. Soma-se o valor obtido a um totalizador. Repita os passos 2, 3 e 4 até percorrer todo a extensão numérica.
  5. Faça a divisão do totalizador obtido por 11.
  6. Subtraia o resto valor obtido no passo anterior, de 11.

Abaixo segue a implementação.

Para cálculo do dígito verificador de campo, execute os seguintes passos:

  1. Inverta os valores do campo e inicialize um fator multiplicativo com 2. Tal fator irá alternar entre os valores 1 e 2.
  2. Multiplique do dígito atual do campo pelo fator multiplicativo.
  3. Caso o valor multiplicado for maior que 10, aplique a regra dos noves fora. Por exemplo 12, 12 - 9 = 3.
  4. Soma-se o valor obtido a um totalizador. Repita os passos 2, 3 e 4 até percorrer todo a extensão numérica.
  5. Faça a divisão do totalizador obtido por 10.
  6. Subtraia o resto valor obtido no passo anterior, de 10.

Abaixo segue uma função que realiza o cálculo desse dígito.

O cálculo do fator de vencimento é mais simples, basta subtrair a data de vencimento do título pela Data Base(07/10/1997). 

 

Os passos para cálculo do dígito verificador geral segue os mesmos do nosso número. No entanto, deve ser passado para função uma sequência seguindo a ordem:

BANCO + MOEDA + CAMPO 5 + NOSSO NÚMERO + CÓDIGO CEDENTE

Para exemplificação seguem os códigos abaixo:

E por fim a implentação da montagem com da linha digitável....


Só por curiosidade, pra você entender o boleto:

 

  1. Código do Banco
    É composto do código do banco mais o dígito verificador.
  2. Linha digitável
    É a representação numérica do código de barras.
    A linha digitável é baseada no valor do código de barras, mas não é o mesmo numero.
    Ela serve para o pagamento do boleto via Internet e também é utilizada quando o código de barras está danificado.
  3. Vencimento
    Data de vencimento do boleto.
  4. Agência código cedente
    Este campo varia conforme o banco, mas em geral é composto pelo número da carteira, agência, conta e dígito. Dependendo do banco, pode ser: agência+conta ou mesmo carteira+agência+conta. Cada banco tem um padrão.
  5. Nosso Número
    Este campo também varia conforme o banco, mas você deve dar uma atenção especial a ele, porque quando o boleto é pago, em geral é esse o número que aparece no seu extrato, assim você tem como identificar o boleto pago.
    Portanto esse número, deve ser diferente para cada boleto emitido, e não podendo haver duplicidades.
    Alguns bancos fornecem uma faixa de números que o cliente pode trabalhar, outros já deixam a critério do cliente.
  6. Valor do Documento
    Este campo contém o valor do documento, com duas casas decimais e vírgula como separador decimal.
  7. Código de Barras
    São código de barras, que através de sua espessura representam "0" ou "1" em binário.
    No total o código de barras é composto por 44 dígitos numéricos, que representam o valor, data de vencimento, entre outras informações do boleto. A composição e disposição desses números variam de banco pra banco, podendo conter o número da agencia, conta corrente, código do cliente, etc.
  8. Carteira
    Contem o código da carteira, que está sendo utilizada.
    Isto também muda de banco para banco, mais adiante darei detalhes de qual é a mais indicada para pagamentos via Internet e o porquê.
  9. Sacado
    Sacado é quem paga o boleto.
    Este campo contém os dados da pessoa que irá pagar o boleto: nome, endereço, etc..
  10. Data do Documento
    Data em que o boleto foi gerado ou emitido, no caso de segunda via por Internet.
  11. Cedente
    Cedente é quem emitiu o boleto.
    Este campo contém o nome de quem emitiu o boleto, que em geral é o titular da conta.
    Pode ser pessoa física ou jurídica, mas isso depende do banco.

#FicaADica, na maioria das empresas decentes você consegue gerar um boleto atrasado na web mesmo, mas se você precisar - Aí esta ....

[ ]'s Mazzei