Gerando Boletos Bancários com o VB e Crystal Reports - I
O que é preciso para gerar Boletos Bancários ? Bela pergunta , não é mesmo . Que tal começar pelo começo : O que é um boleto bancário ?
Provavelmente você já deve conhecer um boleto bancário . Quem não teve um boleto em mãos para pagar ? Se você é um desses poucos felizardos que nunca viram um boleto bancário , permita-me apresentá-lo , na figura abaixo temos um protótipo de um boleto bancário:
|
Embora haja pequenas diferenças de banco para banco o layout acima pode ser considerado como um padrão para o boleto bancário. O boleto bancário que adotaremos como referência é o usado pelo Banco do Brasil.(Se você vai gerar para outro banco deve solicitar ao banco a documentação do boleto). Vamos as principais partes de um boleto bancário:
01. Especificações do Boleto
Bancário a) número de vias ou partes - 2 (duas), sendo: ( Obs: A ficha de caixa foi abolida) I - Ficha de
Compensação; b) disposições das vias ou partes: I - se sob a forma de
vias carbonadas ou auto-copiativas, a primeira via deve
ser a Ficha de Compensação; |
Descrevendo as partes do Boleto Bancário :
Banco do Brasil |
001-9 |
39992.76581 29000.000009 00303.000020 1 18000 |
- Temos aqui o nome ou o logotipo do banco e o número de identificação do banco na câmera de compensação interbancária ( cada banco possui um número que o identifica: 001- Banco do Brasil 341 - Banco Itaú , 237-Bradesco , etc...)
- O 'pequeno número' que você vê do lado direito é a famosa linha digitável ; ela é utilizada para identificar o boleto e deve ser digitada quando o código de barras não pode ser lido ou quando você vai fazer o pagamento do boleto na internet.A Linha digitável tem o seguinte layout:
BBBMC.CCCCd
CCCCC.CCCCCd CCCCC.CCCCCd D VVVVVVVVVVVVVV
onde:
B - número do banco
M - Moeda (sempre 9 - real)
V - valor
C - campo livre - depende do banco
D - Digito verificador do código de
barras
d - digito verificados da linha
digitáveis
Assim para o Banco do Brasil a composição da linha digitável deve seguir o seguinte composição:
Linha digitável: Composição dos
campos:
a) PRIMEIRO
CAMPO - composto pelo código do Banco (posições 1
a 3 do código de barras), código da moeda (posição 4
do código de barras), as cinco primeiras posições do
campo livre (posições 20 a 24 do código de barras) e
dígito verificador deste campo; b) SEGUNDO CAMPO
- composto pelas posições 6 (sexta) à 15 (décima
quinta) do campo livre (posições 25 a 34 do código de
barras) e dígito verificador deste campo; c) TERCEIRO CAMPO
- composto pelas posições 16 (décima sexta) à 25
(vigésima quinta) do campo livre (posições 35 a 44 do
código de barras) e dígito verificador deste campo; d) QUARTO CAMPO -
Dígito Verificador geral do Código de Barras (posição
5 do código de barras); e) QUINTO CAMPO - composto pelo fator de vencimento (posições 6 a 9 do código de barras) e pelo valor nominal do documento (posições 10 a 19 do código de barras), com a indicação de zeros entre eles até compor as 14 posições do campo e sem edição (sem ponto ou vírgula). Quando se tratar de bloqueto sem discriminação de valor no código de barras a representação deve ser com zeros; f) editar os três primeiros campos com um ponto; g) entre cada campo deverá haver espaço equivalente a 01 caracter; h) a disposição dos dados na linha digitável não se apresenta na mesma ordem encontrada no código de barras; i) os dígitos verificadores referentes aos PRIMEIRO, SEGUNDO e TERCEIRO campo não são representados no código de barras. |
|
|
||||
|
|
- A seguir temos o local de Pagamento , geralmente até o vencimento, o boleto pode ser pago em qualquer banco. (Alguns bancos não deixam isto bem claro ....)
- Temos também a data de vencimento (quando o boleto vence) , o nome do Cedente (A empresa para quem estamos pagando o boleto) o número da Agência Bancária (0057-4) e o código atribuído ao Cedente pelo banco.
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
- Temos aqui a data do documento (data de geração) o número do documento , a espécie de documento ( podemos ter: DM-Duplicata Mercantil DS-Duplicata de Serviços RC-Recibo NP-Nota Promissória , etc..)
- O Campo Aceite , indicando se o comprador 'aceitou' o título , o indicativo da carteira ( cada banco usa de modo diferente este campo: No BB temos carteira 11-cobrança simples 17-cobrança direta com registro 18-cobrança sem registro ) a espécie da moeda ( geralmente R$ ) a quantidade e o Valor do documento.
- O Nosso Número é o número que identifica o título perante o banco , geralmente possui 17 posições e é composto pelo número do convênio ( seis posições )
|
|
- Depois temos uma área reservada para que o cedente coloque instruções relativas ao boleto. Geralmente informações sobre multa , desconto , protesto , etc...
- Os valores para Descontos/Abatimentos e Outras Deduções ; Mora/Multa e Outros Acréscimos e o finalmente o Valor a ser cobrado do sacado.
|
Ficha de Compensação |
- Agora temos o endereço do sacado e a identificação da via , no caso , Ficha de Compensação.
Autenticação Mecânica | |
- Por último temos o código de barras e o espaço reservado para autenticação mecânica.
03. Código de Barras a) o Código de Barras utilizado é do tipo I-25 - (2 de 5) intercalado; b) (2 de 5) intercalado significa que 5 (cinco) barras definem 01 (um) caracter, sendo que duas delas são barras largas; c) intercalado significa que os espaços entre as barras também têm significado, de maneira análoga às barras; d) deve ser observada a distância de 12 mm desde a margem inferior da Ficha de Compensação até o centro do Código de Barras; e) comprimento total igual a 103 (cento e três) mm e altura total igual a 13 (treze) mm; f) deixar espaço livre (zona de silêncio) de 5mm entre a margem esquerda do papel até o início do Código de Barras; g) o código de barras é composto por dois campos: campo obrigatório e campo livre; h) o conteúdo do campo obrigatório é determinado pelo Banco Central do Brasil e comum a todos os bancos; i) o conteúdo do (Campo Livre) é específico para o Banco do Brasil; |
O Layout do Código de Barras:
A
partir de 01.09.2000, o leiaute do código de barras
passa a ser:
|
Cálculo do fator de vencimento:
Metodologia
de cálculo para o fator de vencimento Podem ser adotadas duas fórmulas para o cálculo: a) data base de 07.10.1997, calculando o número de dias entre essa data e a do vencimento (data de vencimento menos data base é igual a fator): VENCIMENTO - 04-07-2000 b) tabela de correlação data X fator, iniciando pelo fator 1000, que corresponde à data de vencimento 03.07.2000, e assim sucessivamente:
Exemplo: 99997.77213 //
30530.150082 // 18975.000003 // 3 // 10010000035000 Obs: quando a primeira posição do campo //valor// (fator de vencimento mais valor) for zero, significará que esse título não conterá o fator de vencimento no código de barras/linha digitável, tratando-se portanto as 14 (catorze) posições como valor. |
Calculo do Dígito Verificador do Código de Barras (quinta posição)
- Pega-se as 43 posições (44 menos a
quinta).
- Multiplica-se cada posição, a partir da última para a
primeira, por 2,3,4,5,6,7,8 e 9 sucessivamente.
- Soma-se os resultados.
- Multiplica-se por 10.
- Divide-se por 11. Se o resto for 10 ou 0, o digito é 1. Se
não, o resto é o digito.
OBS: os dígitos verificadores dos campos agência, código do cedente e nosso-número, calculados com base no módulo 11 , são impressos nos bloquetos e não devem estar representados no código de barras e linha digitável.
Montando o código de barras e a linha Digitável
Vamos agora mostrar como montar o código de barras e a linha digitável. Para começar teremos que usar funções para calcular o digito verificador ( DV ) da agência , do código do cedente , do nosso-número e da linha digitável.
Função para calcular o DV da agência , código do cedente e do nosso-número.
MÓDULO
11 PARA CÁLCULO DE DÍGITO VERIFICADOR DE AGÊNCIA,
CÓDIGO DE CEDENTE E NOSSO-NÚMERO
a) O módulo 11 é utilizado para montagem dos campos nosso número, código do cedente e prefixo da agência, que serão impressos no fichamento de cobrança; b) Cada algarismo que compõe o nosso número é multiplicado pelo respectivo multiplicador (peso). Os multiplicadores (pesos) variam de 9 a 2, da direita para a esquerda; c) O primeiro dígito da direita para a esquerda deverá ser multiplicado por 9, o segundo por 8 e assim sucessivamente; d) Os resultados das multiplicações são somados: 00 + 72 + 35.... + 8 + 0 (igual) 179. O total da soma é divido por onze, conforme segue: 179/11 resto igual a 3. -
se o resto for menor que 10 (dez) o DV será igual ao
resto; |
O código Visual Basic para a função para calcular esses DV - Módulo 11 - pode ser o seguinte:
Function
Calculo_DV11(strNumero As String) As String 'declara as variáveis Dim intContador As Integer Dim intNumero As Integer Dim intTotalNumero As Integer Dim intMultiplicador As Integer Dim intResto As Integer |
Função para cálculo do dígito verificador da linha digitável.
MÓDULO
10 PARA CÁLCULO DE DÍGITO VERIFICADOR DOS CAMPOS DA
LINHA DIGITÁVEL
a) o módulo 10 deverá ser utilizado para calcular o DV dos 03 (três) primeiros campos da linha digitável; b) os multiplicadores começam com o número 2 (dois), sempre pela direita, alternando-se 1 e 2; c) multiplicar cada algarismo que compõe o número pelo seu respectivo peso (multiplicador); d) caso o resultado da multiplicação seja maior que 9 (nove) deverão ser somados os algarismos do produto, até reduzi-lo a um único algarismo; e) fazer o somatório dos resultados obtidos: no exemplo a soma é igual a 25; f) subtrair o total apurado no item anterior, da dezena imediatamente superior ao total apurado: 30 - 25 é igual a 5; g) o resultado obtido será o dígito verificador do número. DV é igual a 5; h) se o resultado da subtração for igual a 10 (dez), o dígito verificador será igual a 0 (zero). |
O código Visual Basic para a função para calcular esses DV - Módulo 10 - pode ser o seguinte:
Function
Calculo_DV10(strNumero As String) As String 'declara As variáveis Dim intContador As Integer Dim intNumero As Integer Dim intTotalNumero As Integer Dim intMultiplicador As Integer Dim intResto As Integer 'verifica
as exceções ( 0 -> DV=0 ) |
O Código de Barras
Iremos montar o código de barras para uma carteira 18 (sem registro) com nosso número de 17 posições com fator de vencimento. Esquematizando teremos:
123.4.5.67890123456789.012345.67890123456789012.34
Banco m dv fator valor no.convenio nosso número - 17 posições tipo
001.9.4.10000000542068.020863.47139120100002678.21
Temos que calcular o DV do código de barras para isto usamos o seguinte algoritmo:
a) o
código de barras possui 44 (quarenta e quatro)
posições, incluindo o D.V.; b) para calcular o D.V. considerar 43 posições do Código de Barras, sendo: da posição 1 a 4 e da posição 6 a 44; c) multiplicar cada algarismo que compõe o número pelo seu respectivo multiplicador (peso), iniciando-se pela 44 posição e saltando a 5 posição; d) os multiplicadores (pesos) variam de 2 a 9; e) o primeiro dígito da direita para a esquerda deverá ser multiplicado por 2, o segundo por 3 e assim sucessivamente; f) os resultados das multiplicações devem ser somados. g) o total da soma deverá ser dividido por 11 h) o resto da divisão deverá ser subtraído de 11 i) especificamente para o D.V. do Código de Barras, considerar: I - se o resultado da subtração for: -
igual a 10....................D.V. igual a 1; II- o resultado deste cálculo deverá ser incluído na 5a posição do Código de Barras. ATENÇÃO - Não será admitido o dígito 0 (zero) na quinta posição, pois indicaria que o código de barras não possui dígito verificador; j) nas posições 43 a 44 do código de barras deverá ser informado, sempre, o tipo de serviço 21. |
A função que iremos usar para montar o código de barras é dada a seguir:
Private
Function Monta_CodBarras(Banco As String, Moeda As
String, valor As Single, vencimento As Date, Livre As
String) Dim codigo_sequencia As String Dim database As Date Dim fator As Integer Dim intDac As Integer 'database para calculo do fator database = CDate("7/10/1997") fator = DateDiff("d", database, Format(vencimento, "dd/mm/yyyy")) valor = Int(valor * 100) Livre = Format(Livre, "0000000000000000000000000") ' sequencia sem o DV codigo_sequencia = Banco & Moeda & fator & Format(valor, "0000000000") & Livre ' calculo do DV intDac = calcula_DV_CodBarras(codigo_sequencia) ' monta a sequencia para o codigo de barras com o DV Monta_CodBarras = Left(codigo_sequencia, 4) & intDac & Right(codigo_sequencia, 39) End Function |
A função que calcula o digito verificador do código de barras é dada abaixo:
Private
Function calcula_DV_CodBarras(sequencia As String) As
Integer Dim intContador, intNumero, intTotalNumero As Integer Dim intMultiplicador, intResto, intresultado As Integer Dim caracter As String intMultiplicador = 2 For intContador = 1 To 43 caracter = Mid(Right(sequencia, intContador), 1, 1) If intMultiplicador > 9 Then intMultiplicador = 2 intNumero = 0 End If intNumero = caracter * intMultiplicador intTotalNumero = intTotalNumero + intNumero intMultiplicador = intMultiplicador + 1 Next intResto = intTotalNumero Mod 11 intresultado = 11 - intResto If intresultado = 10 Or intresultado = 11 Then calcula_DV_CodBarras = 1 Else calcula_DV_CodBarras = intresultado End If End Function |
Fim da primeira Parte !.
Na segunda parte
mostraremos a função para gerar a linha digitável e como gerar
o boleto no Crystal Reports.
Clique aqui para ler a segunda
parte :Gerando Boletos Bancários com o VB e
Crystal Reports II.
Importante:
Verifique se não houve
alteração das informações consultando o manual de cobrança da Febraban
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#