Академический Документы
Профессиональный Документы
Культура Документы
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