Boleto bancário ( Fácil e Simples ) - Parte 3
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:
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:
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>";
Realmente o BB tem esta opção, eu mesmo usava alguns anos atras.
Mas o intuito deste tutorial não é obrigar ninguem a fazer e sim demostrar a facilidade de se criar algo que deseje e ter o conhecimento sobre aquilo.
Pode funcionar 100% para uns e para outros nem tanto, mas é uma questão de ajuste, de vontade de resolver a teoria está ai, para todo mundo usar e melhorar.
Pode ser adaptada para todos os bancos, pois todos fazem uso do Modulo10 e Modulo11, na maioria das vezes o que muda é a composição da Linha Digital, ex: derepente o valor pode estar no campo 2 ou campo 3. Ou o nosso numero.
Mas que for esperto vai pegar um boleto do banco que deseja usar e usando o tutorial gerar um boleto igual, perfeito e se você tiver a documentação do Banco, mamão com açucar.
Abraços,
Maykson
* Outra coisa, muito raramente eu uso um sistema pronto, devo ter usado 2 vezes na minha vida, eu não uso OsCommerce, ele é ótimo. Mas eu gosto de criar a minha loja virtual, com a cara e a necessidade do cliente e não deixar milhares de opção que ele nem vai saber usar e nem muita gente que usa sabe, muitos fazendo uns remendos feios. Mais cada um na sua, sendo assim não adianta perguntar sobre OsCommerce para mim, se for para trabalho de faculdade principalmente. Tendo ajudar a todos que me procuram, mas nem sempre consigo, mas prometo tentar.
Mas o intuito deste tutorial não é obrigar ninguem a fazer e sim demostrar a facilidade de se criar algo que deseje e ter o conhecimento sobre aquilo.
Pode funcionar 100% para uns e para outros nem tanto, mas é uma questão de ajuste, de vontade de resolver a teoria está ai, para todo mundo usar e melhorar.
Pode ser adaptada para todos os bancos, pois todos fazem uso do Modulo10 e Modulo11, na maioria das vezes o que muda é a composição da Linha Digital, ex: derepente o valor pode estar no campo 2 ou campo 3. Ou o nosso numero.
Mas que for esperto vai pegar um boleto do banco que deseja usar e usando o tutorial gerar um boleto igual, perfeito e se você tiver a documentação do Banco, mamão com açucar.
Abraços,
Maykson
* Outra coisa, muito raramente eu uso um sistema pronto, devo ter usado 2 vezes na minha vida, eu não uso OsCommerce, ele é ótimo. Mas eu gosto de criar a minha loja virtual, com a cara e a necessidade do cliente e não deixar milhares de opção que ele nem vai saber usar e nem muita gente que usa sabe, muitos fazendo uns remendos feios. Mais cada um na sua, sendo assim não adianta perguntar sobre OsCommerce para mim, se for para trabalho de faculdade principalmente. Tendo ajudar a todos que me procuram, mas nem sempre consigo, mas prometo tentar.
19/01/2006 2:50am
(~19 anos atrás)
No função do Modulo11, onde era:
$Resultado = floor($Soma/11);
$Resto = $Soma - ($Resultado * 11);
$Dv = 11-$Resto;
if($Dv == '10' || $Dv == '1' || $Dv == '0'){
$Dv = '1';}
return $Dv;
O correto é:
$Resultado = floor($Soma/11);
$Resto = $Soma - ($Resultado * 11);
if($Resto == '10' || $Resto == '1' || $Resto == '0'){
$Dv = '1';
}else{
$Dv = 11-$Resto; }
return $Dv;
Assim trocando o if(), corrigimos o problema do dv retornar 11.
Desculpe por não ter percebido antes.
Abraços.
Maykson
$Resultado = floor($Soma/11);
$Resto = $Soma - ($Resultado * 11);
$Dv = 11-$Resto;
if($Dv == '10' || $Dv == '1' || $Dv == '0'){
$Dv = '1';}
return $Dv;
O correto é:
$Resultado = floor($Soma/11);
$Resto = $Soma - ($Resultado * 11);
if($Resto == '10' || $Resto == '1' || $Resto == '0'){
$Dv = '1';
}else{
$Dv = 11-$Resto; }
return $Dv;
Assim trocando o if(), corrigimos o problema do dv retornar 11.
Desculpe por não ter percebido antes.
Abraços.
Maykson
19/01/2006 2:30am
(~19 anos atrás)
Bom pessoal eu acabei de criar uma loja virtual que o cliente fechou convenio com o BB então tive que partir pra briga, nunca tinha feito nada relacionado ao BB, Tenhos sites que usam o boleto itau, bradesco sem qualquer problema.
Seguindo o tutorial do amigo eu percebi várias discordância na linha digitavel:
1) A loja não imprime o boleto mas envia os dados via form para que o BB imprima e portanto estou com um boleto gerado pelo BB e impresso na minha frente.
Bom vamos as comparações:
1) agencia: 3138
2) conta> 11398
3) valor R$ 32,80
4) Num. Docto. IdCobr + nr. pedido (o banco usa 17 digitos então:
Nosso numero: 12291960000000140
que é o mesmo que aparece em Nº do documento.
5) data de vencimento: 19/01/2006
Carteira: 18
Data emissão/processamento: 16/01/2006
Linha digital:
00190.00009 01229 196009 00000.140186 6 30260000003280
Se vcs observarem, na linha digital não aparece o numero da conta nem a agencia.
Isso seria pelo fato do proprio banco ter gerado o boleto.
?????
Seguindo o tutorial do amigo eu percebi várias discordância na linha digitavel:
1) A loja não imprime o boleto mas envia os dados via form para que o BB imprima e portanto estou com um boleto gerado pelo BB e impresso na minha frente.
Bom vamos as comparações:
1) agencia: 3138
2) conta> 11398
3) valor R$ 32,80
4) Num. Docto. IdCobr + nr. pedido (o banco usa 17 digitos então:
Nosso numero: 12291960000000140
que é o mesmo que aparece em Nº do documento.
5) data de vencimento: 19/01/2006
Carteira: 18
Data emissão/processamento: 16/01/2006
Linha digital:
00190.00009 01229 196009 00000.140186 6 30260000003280
Se vcs observarem, na linha digital não aparece o numero da conta nem a agencia.
Isso seria pelo fato do proprio banco ter gerado o boleto.
?????
16/01/2006 7:38pm
(~19 anos atrás)
Olá Galera,
Alguém poderia dar um help em como adaptar o Boleto em um site de oscommerce?
Como o boleto já é uma das opções, acredito que não deve ter grandes dificuldades.
Valeu!
Alguém poderia dar um help em como adaptar o Boleto em um site de oscommerce?
Como o boleto já é uma das opções, acredito que não deve ter grandes dificuldades.
Valeu!
17/11/2005 10:26am
(~19 anos atrás)
kara eu já tinha procurado prá tudo quando é lado um manual prático que ensinasse a gerar boletas.
Pois ao ler esse seu artigo, foi mão-na-roda.
Vlw kara por compartilhar esse conhecimento com a comunidade do phpbrasil.
Pois ao ler esse seu artigo, foi mão-na-roda.
Vlw kara por compartilhar esse conhecimento com a comunidade do phpbrasil.
02/08/2005 2:24pm
(~19 anos atrás)
Oi Tadeu,
o arquivo remessa só é utilizado caso o boleto seja impresso pelo banco ou vc tenha uma carteira registrada, caso contrário vc não envia nada ao banco.
O nosso número realmente é bem restrito em alguns bancos no entanto ele pode ser montado como vc quiser, procure montá-lo de maneira q vc possa identificar facilmente ao q o boleto se refere, por exemplo tipo, parcela e matrícula de um aluno.
Abraço
o arquivo remessa só é utilizado caso o boleto seja impresso pelo banco ou vc tenha uma carteira registrada, caso contrário vc não envia nada ao banco.
O nosso número realmente é bem restrito em alguns bancos no entanto ele pode ser montado como vc quiser, procure montá-lo de maneira q vc possa identificar facilmente ao q o boleto se refere, por exemplo tipo, parcela e matrícula de um aluno.
Abraço
27/07/2005 10:31am
(~19 anos atrás)
Quando se gera um boleto vc num tem que enviar um arquivo de remessa para o Banco não?
É que andei lendo e nesse arquivo podemos colocar o numero do titulo na empresa com até 25 dígitos o que diminuiria a limitação de carcteres no nossoNúmero.
É que andei lendo e nesse arquivo podemos colocar o numero do titulo na empresa com até 25 dígitos o que diminuiria a limitação de carcteres no nossoNúmero.
27/07/2005 9:12am
(~19 anos atrás)
Fala povo,
então, da minha experiência com boletos tirei o seguinte:
1. Os Manuais dos bancos tem todas as informações de calculos e dimensões que vc precisa. A diferença de um banco para outro é mínima, pois seguem um padrão da febraban.
2. Meus primeiros boletos fiz o código de barras com imagens como o exemplo do nosso colega, porém a solução ideal q encontrei foi criar os boletos em PDF utilizando a Classe fpdf e a fonte da febraban mesmo(Vale a pena o investimento).
Abraço
então, da minha experiência com boletos tirei o seguinte:
1. Os Manuais dos bancos tem todas as informações de calculos e dimensões que vc precisa. A diferença de um banco para outro é mínima, pois seguem um padrão da febraban.
2. Meus primeiros boletos fiz o código de barras com imagens como o exemplo do nosso colega, porém a solução ideal q encontrei foi criar os boletos em PDF utilizando a Classe fpdf e a fonte da febraban mesmo(Vale a pena o investimento).
Abraço
26/07/2005 12:57pm
(~19 anos atrás)
Interessados em desenvolver este e outros projetos para nossa empresa, favor entrar em contato.