Boleto bancário ( Fácil e Simples ) - Parte 3
por Maykson

Com este tutorial você vai criar um boleto bancário do Banco do Brasil.
E terá facilidades em adaptar para o seu banco uma vez que o principio básico é regulamentado pela Febraban, bastará você ler a documentação do seu banco.




Bom, iniciamos a ultima parte do nosso tutorial revendo o que temos até aqui.

1ª Descobrimos como é composto a Linha Digitável
2ª Achamos o Dígito Verificador dos Campos
3ª Encontramos o Fator de Vencimento
4ª Geramos o Número do Código de Barras e seu Dígito Controlador

E o que temos é:

Número do Código de Barras:
00191280200000053268888882222266660007777718

Linha Digitável:
00198.88882 82222.266668 00077.777183 1 28020000005326

Todas as informações contidas nas variáveis que usamos e que serão necessárias para gerar o Código de Barras descritas abaixo.

$CodBarras = $CodBanco.$CodMoeda.$DC.$FatorVenc.$ValorDoc.$NossoNum.$Agencia.$NumConta.$Carteira;

Ou

$CodBarras = 00191280200000053268888882222266660007777718


Como de costume, devemos saber algumas coisinhas para continuar.

Antes tenha certeza que na funçao Soma11, que criamos na Parte 2 o array $Mod11 tenha 43 digitos e seja igual a este:

$Mod11 = '4329876543298765432987654329876543298765432';

O Padrão de Código de Barras utilizado pelos Bancos Brasileiros é o I25 ( Intercalado 2 de 5 ) e deve ter um comprimento de 103 mm e altura de 13 mm, além de só permitir números. A explicação do I25, acho um pouco confusão e mas, veja: “Note que o termo "2 of 5" vem do fato de que em cada padrão, duas das barras são largas e, em uma única unidade I25, existem cinco barras escuras, assim como cinco barras claras (ou espaços). Ou seja: duas barras largas de um total de cinco barras por cada padrão.”

Eu no meu modo simplório de viver e entender, prefiro ter uma visão diferente do esquema deste código, mas a função aqui é explicar, então eu mostro o oficial e ensino meu pessoal. Você escolhe qual prefere.

Vamos descobrir o que significa o 5 do Padrão I25.

Cada número de 0 a 9 tem um valor binário de ‘5’ dígitos correspondente e são eles:

0 = 00110
1 = 10001
2 = 01001
3 = 11000
4 = 00101
5 = 10100
6 = 01100
7 = 00011
8 = 10010
9 = 01010

Muito bom né? Pois então devemos saber também que o 0 (Zero) significa fino e 1 (Um) significa largo.


Bem, ai você pensou nossa entendi, agora está fácil, vou pegar os Números do Código de Barras e achar seu correspondente binário e pronto.
Acontece que nosso padrão é 2 por 5 e não 1 por 5, então nos temos que dividir nosso preciso Número em casas de 2 dígitos, entendeu o 2 no nosso padrão, um exemplo:

O Número 125689 -> 12 – 56 - 89 fica assim.

Mas ainda devemos saber que um é a cor preta o outro a branca, então teríamos para o número 12:

1 = 10001 - preto
2 = 01001 - branco

Vai pensar que está fácil de novo né? Pois agora vem o I ( Intercalado do nosso Padrão ), mas o que é isto significa afinal? Significa que devemos pegar um dígito preto e um branco intercaladamente até finalizar veja:

12 = 1001000011
pbpbpbpbpb p = preto - b = branco

Já sabemos que 1 é largo e 0 é fino, então temos nosso código de barras.

Mas como fazer isto com o PHP?
Vamos lá então, mas antes, além do nosso número, vamos precisar de duas imagens .gif uma preta e uma branca com 10 px de largura e 80 px de altura.

Mãos a obra:


<?php
// Definimos as dimensões das imagens
$fino 1;
$largo 3;
$altura 40;

// Criamos um array associativo com os binários
$Bar[0] = "00110";
$Bar[1] = "10001";
$Bar[2] = "01001";
$Bar[3] = "11000";
$Bar[4] = "00101";
$Bar[5] = "10100";
$Bar[6] = "01100";
$Bar[7] = "00011" ;
$Bar[8] = "10010";
$Bar[9] = "01010";
?>


Se você chegou aqui fácil já fez 70% do nosso código, agora falta "ecoar" o resultado graficamente.

O Código de Barra deve conter por padrão um inicio(abertura) e um fim(encerramento)

O inicio deve conter:
Preto Fino
Branco Fino
Preto Fino
Branco Fino

Nosso código:


// Inicio padrão do Código de Barras
echo "<img src=preto.gif  width=$fino height=$altura border=0>";
echo "<img src=branco.gif width=$fino height=$altura border=0>";
echo "<img src=preto.gif  width=$fino height=$altura border=0>";
echo "<img src=branco.gif width=$fino height=$altura border=0>";


O número de digitos do Código de Barras sempre deve ser par ou seja divisível por 2.
Se não for devemos acrescentar um zero no inicio do número
Ai você vai pensar mas temos 44 dígitos ou seja é divisível por 2, você está certo como poderá utilizar este código com outros números não par, vou mostrar como saber e acrescentar o 0, para facilitar sua vida depois.

Vamos ao conteúdo:


// Checando para saber se o conteúdo é impar
if (bcmod(strlen($CodBarras),2) <> 0) {
    $CodBarras = '0'.$CodBarras;
}


A condição if utiliza da função bcmod para dividir por 2, se a divisão não for um número inteiro adiciona o 0 ao $CodBarras.

Vamos fazer agora um looping pelo nosso $CodBarras, separando os número pretos e brancos.


for ($a = 0; $a < strlen($CodBarras); $a++){

    $Preto  = $CodBarras[$a];
    $CodPreto  = $Bar[$Preto];

    $a = $a+1; // Sabemos que o Branco é um depois do Preto...
    $Branco = $CodBarras[$a];
    $CodBranco = $Bar[$Branco];


    // Encontrado o CodPreto e o CodBranco vamos fazer outro looping dentro do nosso
    for ($y = 0; $y < 5; $y++) { // O for vai pegar os binários

        if ($CodPreto[$y] == '0') { // Se o binario for preto e fino ecoa
            echo "<img src=preto.gif  width=$fino height=$altura border=0>";
        }

        if ($CodPreto[$y] == '1') { // Se o binario for preto e grosso ecoa
            echo "<img src=preto.gif  width=$largo height=$altura border=0>";
        }

        if ($CodBranco[$y] == '0') { // Se o binario for branco e fino ecoa
            echo "<img src=branco.gif  width=$fino height=$altura border=0>";
        }

        if($CodBranco[$y] == '1') { // Se o binario for branco e grosso ecoa
            echo "<img src=branco.gif  width=$largo height=$altura border=0>";
        }
    }

} // Fechamos nosso looping maior

// Encerramos o código ecoando o final(encerramento)

// Final padrão do Codigo de Barras
echo "<img src=preto.gif  width=$largo height=$altura border=0>";
echo "<img src=branco.gif width=$fino  height=$altura border=0>";
echo "<img src=preto.gif  width=$fino  height=$altura border=0>";


Bem assim encerramos o tutorial, para ser sincero o Código de Barras eu não consegui testar, coisa que eu fiz com a linha digitável, de toda forma acredito que o importante é explicar como fazer ou no mínimo passar uma idéia do que é gerar um boleto bancário, para outros bancos bastará você saber como é o esquema da linha digitável