Вы находитесь на странице: 1из 5

Entendendo como formada a linha digitvel nos boletos

bancrios

Introduo

Todo boleto bancrio exige uma srie de especificaes que devem ser seguidas com
o intuito de estabelecer uma padronizao de contedo. A pouco tempo adquiri uma
documentao da CEF - Caixa Econmica Federal, onde constava as principais
caractersticas que um boleto deveria ter para poder entrar em circulao. Esta
postagem levar em conta a formao da linha digitvel dos boletos para a CEF.

Descrio

Uma linha digitvel segue a seguinte estrutura:


Figura 1. Layout Linha Digitvel

Onde:

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


A linha digitvel de qualquer boleto bancrio composto por 5 campos. Abaixo segue
as respectivas descries:

Campo 1: as posies de 1 a 3 refere-se ao cdigo da agncia, neste exemplo 104,
a quarta posio refere-se a moeda(9 para o real) as prximas cinco posies so os
primeiros dgitos do campo livre, mais um dgito verificador de campo.
Campo 2: composto pelas posies de 6 a 15 do campo livre e um dgito
verificador de campo.
Campo 3: composto pelas posies de 16 a 25 do campo livre e um dgito
verificador de campo.
Campo 4: dgito verificador geral da linha digitvel.
Campo 5: composto pelo "fator de vencimento" com quatro posies e o valor
nominal do boleto, sem vgulas. Torna-se necessrio a incluso de zeros entre os dois,
afim de, compor as quatorze posies.

Campo livre

O Campo Livre formado pelo nosso nmero(nmero gerado a cada boleto) com 10
dgitos e mais 15 dgitos contendo o cdigo do cedente fornecido pela agncia.

Observe que nos trs primeiros campos colocado um ponto aps a 5 posio, afim
de, facilitar a digitao caso necessrio. No 5 campo, preenche-se com zero as
posies restantes entre o fator de vencimento e o valor do documento.

Nota: O fator de vencimento obtido pela diferena entre a Data Base(07/10/1997)
e a data de vencimento do ttulo. O mesmo aparece nas 4 primeiras posies do
ltimo campo.

Utiliza-se o MDULO 10 para clculo do dgito verificador de campo. Para realizar o
clculo execute os seguintes passos:

Inverta os valores do campo e inicialize um fator multiplicativo com 2. Tal fator ir
alternar entre os valores 1 e 2.
Multiplique do dgito atual do campo pelo fator multiplicativo.
Caso o valor multiplicado for maior que 10, aplique a regra dos noves fora. Por
exemplo 12, 12 - 9 = 3.
Soma-se o valor obtido a um totalizador. Repita os passos 2, 3 e 4 at percorrer
todo a extenso numrica.
Faa a diviso do totalizador obtido por 10.
Subtraia o resto valor obtido no passo anterior, de 10.

Abaixo segue uma funo em Python que realiza o clculo desse dgito para
exemplificao.

def verifier_digit(field):
mult = 2
sum = 0

for i in range(len(field)-1, -1, -1):
x = (int(field[i]) * mult)

if(x > 10):
x = (x % 10) + 1

sum += x

if(mult == 2):
mult = 1

else:
mult = 2

if(not (sum % 10)):
sum = 0

else:
sum = 10 - (sum % 10)

return sum

O clculo do fator de vencimento mais simples, basta subtrair a data de vencimento
do ttulo pela Data Base(07/10/1997).

def diff_date(date_comp):
date_def = date(1997,10,7)

return (str(date_comp - date_def))[0:4]

O nosso nmero segue o MDULO 11, com pesos entre 2 a 9. Segue os passos:

Inverta os valores do campo e inicialize um fator multiplicativo com 2.
Multiplique o valor do dgito do campo pelo fator multiplicativo.
Caso o fator multiplicativo for maior que 9, inicialize-o com 2.
Soma-se o valor obtido a um totalizador. Repita os passos 2, 3 e 4 at percorrer
todo a extenso numrica.
Faa a diviso do totalizador obtido por 11.
Subtraia o resto valor obtido no passo anterior, de 11.

Abaixo segue a implementao em Python do nosso nmero.

def calc_our_number(our_number):
mult = 2
sum = 0

for i in range(len(our_number) - 1, -1, -1):
sum += (int(our_number[i]) * mult)

if(mult >= 9):
mult = 2

else:
mult += 1

sum = 11 - (sum % 11)

if(sum > 9):
sum = 0

return our_number + '-' + str(sum)

Os passos para clculo do dgito verificador geral segue os mesmos do nosso nmero.
No entanto, deve ser passado para funo uma sequncia seguindo a ordem:

BANCO + MOEDA + CAMPO 5 + NOSSO NMERO + CDIGO CEDENTE

Para exemplificao seguem os cdigos abaixo:

Dgito verificador geral.

def general_digit(line):
mult = 2
sum = 0

for i in range(len(line) - 1, -1, -1):
sum += (int(line[i]) * mult)

if(mult >= 9):
mult = 2

else:
mult += 1

sum = 11 - (sum % 11)

if(sum > 9 or sum or not sum):
sum = 1

return sum

Montagem linha digitvel

E por fim a implentao da montagem com da linha digitvel.

def mount_line(bank, currency, code_transf, our_number, factor, value):
diff = 10 - len(str(value))

field_1 = str(verifier_digit(bank + currency + our_number[0:5]))
field_2 = str(verifier_digit(our_number[5:10] + code_transf[0:5]))
field_3 = str(verifier_digit(code_transf[5:15]))
field_4 = factor + ('0' * diff) + value

g_digit = general_digit(bank + currency + field_4 + our_number + code_transf)

return bank + currency + our_number[0] + '.' + our_number[1:5]+ field_1\
+ ' ' + our_number[5:10] + '.' + code_transf[0:5] + field_2\
+ ' ' + code_transf[5:10] + '.' + code_transf[10:15] + field_3\
+ ' ' + str(g_digit) + ' ' + field_4

Pode-se incorporar as funes apresentadas em um arquivo de mdulo para uso
posterior.

Jos Mauro da Silva Sandy

Вам также может понравиться