Boleto Bradesco - Parte1
Pelo que percebi, há duas coisas fundamentais para gerar um boleto: Obter o número do código de barras e o número da linha digitável.
- Número do código de barras: Número apartir do qual será gerado as barras para o leitor
- Linha Digitável: Número que será utilizado caso seja impossível a leitura do código de barras.
Código de Barras Padrão BDSC
O Número do código de barras é composto por 44 posições (números)
Veja a estrutura abaixo:
Posições
Composição do campo livre Padrão BDSC
Posições
Bem, apartir deste artigo, veremos aos poucos como montar o nosso boleto padrão BDSC, espero contar com a colaboração dos usuários.
Vamos ver agora como obter o FATOR de vencimento:
FATOR DE VENCIMENTO
O fator de vencimento é o número de dias entre a data base que é 07/10/1997 e a data do vencimento do boleto
Para fascilitar utilizei um script que está no link http://www.phpbrasil.com/scripts/script.php/id/18. Usei a versão 1.2.
Mas para fascilitar aí vai ele ja pronto para retornar o fator vencimento.
Agora que já temos o nosso fator vencimento, vamos começar a compor nosso script
Os dados abaixo foram inventados, não sei de onde é a agência, não sei de quem é a conta e não faço idéia de quem são as outras informações:
Quando compor todo o conjunto nescessário, faltará apenas um campo, que é o campo 5 (dígito verificador do código de barras).
Para obtermos o dígito verificador, precisamos fazer o seguinte:
O conjunto formado sem o campo 5 é de 43 números, então devemos pegar cada número da direita para esquerda e multiplicar por uma sequencia padrão. Esta sequencia começa (direita para esquerda) apartir do nº 2 e vai até nove, e assim por diante até completar 43 casas:
O total da multiplicação de todos os números acima pela sequencia é de 552 dividimos por 11 e o obeteremos o resto da divisão que é=2
Subtraímos 11-Resto
11-2 e termos o dígito verificador que é (9)
Claro...que talvez tudo isso seja complicado, então abaixo vai a função que vai retornar o dígito verificador:
Bem, continuamos no próximo artigo onde vou mostrar como montar o valor do código de barras. T+
- Número do código de barras: Número apartir do qual será gerado as barras para o leitor
- Linha Digitável: Número que será utilizado caso seja impossível a leitura do código de barras.
Código de Barras Padrão BDSC
O Número do código de barras é composto por 44 posições (números)
Veja a estrutura abaixo:
Posições
01-03 -> Código do banco sem o digito 04-04 -> Código da Moeda (9-Real) 05-05 -> Dígito verificador do código de barras 06-09 -> Fator de vencimento 10-19 -> Valor Nominal do Título 20-44 -> Campo Livre (Abaixo)
Composição do campo livre Padrão BDSC
Posições
20-23 -> Código da Agencia (sem dígito) 24-05 -> Número da Carteira 26-36 -> Nosso Número (sem dígito) 37-43 -> Conta do Cedente (sem dígito) 44-44 -> Zero (Fixo)
Bem, apartir deste artigo, veremos aos poucos como montar o nosso boleto padrão BDSC, espero contar com a colaboração dos usuários.
Vamos ver agora como obter o FATOR de vencimento:
FATOR DE VENCIMENTO
O fator de vencimento é o número de dias entre a data base que é 07/10/1997 e a data do vencimento do boleto
Para fascilitar utilizei um script que está no link http://www.phpbrasil.com/scripts/script.php/id/18. Usei a versão 1.2.
Mas para fascilitar aí vai ele ja pronto para retornar o fator vencimento.
<?php function date_diff($from, $to) { /* Usar DD-MM-AA ou DD-MM-AAAA */ list($from_day, $from_month, $from_year) = explode("-", $from); list($to_day, $to_month, $to_year) = explode("-", $to); $from_date = mktime(0, 0, 0, $from_month, $from_day, $from_year); $to_date = mktime(0, 0, 0, $to_month, $to_day, $to_year); $days = ($to_date - $from_date) / 86400; return ceil($days); } $FatorVencimento = date_diff('07-10-1997', $DtVencimento); ?>
Agora que já temos o nosso fator vencimento, vamos começar a compor nosso script
Os dados abaixo foram inventados, não sei de onde é a agência, não sei de quem é a conta e não faço idéia de quem são as outras informações:
<?php //Dados Nescessários $Agencia = "3338"; //Sem o dígito $Banco = "237"; //Sem o dígito $Moeda = "9"; $Carteira = "06"; $NossoNumero = "0038518";//Sem o dígito $CC = "0016324"; // Sem o digito $Valor = "150,00"; $DtVencimento = "10/12/2005"; // Substitui o '/' por '-' $DtVencimento = str_replace('/', '-', $DtVencimento); // Retorna o fator vencimento function date_diff($from, $to) { /* Usar DD-MM-AA ou DD-MM-AAAA */ list($from_day, $from_month, $from_year) = explode("-", $from); list($to_day, $to_month, $to_year) = explode("-", $to); $from_date = mktime(0, 0, 0, $from_month, $from_day, $from_year); $to_date = mktime(0, 0, 0, $to_month, $to_day, $to_year); $days = ($to_date - $from_date) / 86400; return ceil($days); } $FatorVencimento = date_diff('07-10-1997', $DtVencimento); ?>
Quando compor todo o conjunto nescessário, faltará apenas um campo, que é o campo 5 (dígito verificador do código de barras).
Para obtermos o dígito verificador, precisamos fazer o seguinte:
O conjunto formado sem o campo 5 é de 43 números, então devemos pegar cada número da direita para esquerda e multiplicar por uma sequencia padrão. Esta sequencia começa (direita para esquerda) apartir do nº 2 e vai até nove, e assim por diante até completar 43 casas:
2 3 7 9 2 2 5 5 0 0 0 0 0 1 5 0 0 0 3 3 3 8 0 6 0 0 0 0 0 0 1 6 3 2 4 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 0 0 1 6 3 2 4 0 9 8 7 6 5 4 3 2
O total da multiplicação de todos os números acima pela sequencia é de 552 dividimos por 11 e o obeteremos o resto da divisão que é=2
Subtraímos 11-Resto
11-2 e termos o dígito verificador que é (9)
Claro...que talvez tudo isso seja complicado, então abaixo vai a função que vai retornar o dígito verificador:
<?php // Função que calcula o digito verificador Final base 11 function DVG($valor) { $valor = str_replace(".", "", $valor); $segb[0] = substr($valor, 0, 1) * 4; $segb[1] = substr($valor, 1, 1) * 3; $segb[2] = substr($valor, 2, 1) * 2; $segb[3] = substr($valor, 3, 1) * 9; $segb[4] = substr($valor, 4, 1) * 8; $segb[5] = substr($valor, 5, 1) * 7; $segb[6] = substr($valor, 6, 1) * 6; $segb[7] = substr($valor, 7, 1) * 5; $segb[8] = substr($valor, 8, 1) * 4; $segb[9] = substr($valor, 9, 1) * 3; $segb[10] = substr($valor, 10, 1) * 2; $segb[11] = substr($valor, 11, 1) * 9; $segb[12] = substr($valor, 12, 1) * 8; $segb[13] = substr($valor, 13, 1) * 7; $segb[14] = substr($valor, 14, 1) * 6; $segb[15] = substr($valor, 15, 1) * 5; $segb[16] = substr($valor, 16, 1) * 4; $segb[17] = substr($valor, 17, 1) * 3; $segb[18] = substr($valor, 18, 1) * 2; $segb[19] = substr($valor, 19, 1) * 9; $segb[20] = substr($valor, 20, 1) * 8; $segb[21] = substr($valor, 21, 1) * 7; $segb[22] = substr($valor, 22, 1) * 6; $segb[23] = substr($valor, 23, 1) * 5; $segb[24] = substr($valor, 24, 1) * 4; $segb[25] = substr($valor, 25, 1) * 3; $segb[26] = substr($valor, 26, 1) * 2; $segb[27] = substr($valor, 27, 1) * 9; $segb[28] = substr($valor, 28, 1) * 8; $segb[29] = substr($valor, 29, 1) * 7; $segb[30] = substr($valor, 30, 1) * 6; $segb[31] = substr($valor, 31, 1) * 5; $segb[32] = substr($valor, 32, 1) * 4; $segb[33] = substr($valor, 33, 1) * 3; $segb[34] = substr($valor, 34, 1) * 2; $segb[35] = substr($valor, 35, 1) * 9; $segb[36] = substr($valor, 36, 1) * 8; $segb[37] = substr($valor, 37, 1) * 7; $segb[38] = substr($valor, 38, 1) * 6; $segb[39] = substr($valor, 39, 1) * 5; $segb[40] = substr($valor, 40, 1) * 4; $segb[41] = substr($valor, 41, 1) * 3; $segb[42] = substr($valor, 42, 1) * 2; for ($b = 0; $b <= 42; $b++) { $SomaDv = $SomaDv + $segb[$b]; } /* Retorna o Digito Verificador */ $Resto = floor($SomaDv % 11); $DiVG = 11 - $Resto; return $DiVG; } ?>
Bem, continuamos no próximo artigo onde vou mostrar como montar o valor do código de barras. T+
Mesmo assim, o fator de vencimento não é uma data e sim uma diferença de dias entre uma data base e a real data de vencimento que sim seria definida por alguém. Está tudo explicado no artigo...
24/09/2005 8:44pm
(~19 anos atrás)
Olá pessoal... A segunda parte estou desenvolvendo... vou mostrar como criar a linha digitável. Logo logo tá no ar... Falow
09/09/2005 8:09am
(~19 anos atrás)
Excelente o Arquivo . Esou comecando a programar em PHP e este tipo de artigo eh uma mao nao roda !
06/09/2005 5:13pm
(~19 anos atrás)
sayadnstyle, Não é tão simples assim fazer calculo com datas. Imagine que esteja no dia 30. Se somar 5, o seu vencimento vai pro dia 35. Use o mktime() pra fazer calculos com datas, como a função diff_date() usada pelo Álvaro.
Além do q, pelo q eu entendi, já é passada a data de vencimento do boleto ali, e não a data de criação dele. Então, não é preciso fazer essa conta.
Além do q, pelo q eu entendi, já é passada a data de vencimento do boleto ali, e não a data de criação dele. Então, não é preciso fazer essa conta.
29/08/2005 8:21am
(~19 anos atrás)
Esse fator vencimento seria a data do vencimento do boleto?
se for nao seria intereçante da seguinte forma:
-------------------------------
<?
...
$dia = date("d");
$diav = $dia+5;
$DtVencimento = $diav."/".date("m/y");
...
?>
-------------------------------
Explicando:
-------------------------------
$dia = date("d");//pega o dia atual
$diav = $dia+5;//acrescenta 5 ao dia atual
$DtVencimento = $diav."/".date("m/y");
/* Pega o dia do vencimento e acrescenta o mes e o ano atual... sendo a data de vencimento 5 dia depois a data e emicao */
-------------------------------
e so uma sugestao!
mais dessa forma fica mais facil nao acha?
se for nao seria intereçante da seguinte forma:
-------------------------------
<?
...
$dia = date("d");
$diav = $dia+5;
$DtVencimento = $diav."/".date("m/y");
...
?>
-------------------------------
Explicando:
-------------------------------
$dia = date("d");//pega o dia atual
$diav = $dia+5;//acrescenta 5 ao dia atual
$DtVencimento = $diav."/".date("m/y");
/* Pega o dia do vencimento e acrescenta o mes e o ano atual... sendo a data de vencimento 5 dia depois a data e emicao */
-------------------------------
e so uma sugestao!
mais dessa forma fica mais facil nao acha?
25/08/2005 6:42pm
(~19 anos atrás)
<?php
// Função que calcula o digito verificador Final base 11
function DVG($valor)
{
$valor = str_replace(".", "", $valor);
$n = 4;
for($i=0;$i<=42;$i++){
$segb[$i] = substr($valor, $i, 1) * $n;
$n--;
if($n==2){ $n=9; }
}
for ($b = 0; $b <= 42; $b++) {
$SomaDv = $SomaDv + $segb[$b];
}
/* Retorna o Digito Verificador */
$Resto = floor($SomaDv % 11);
$DiVG = 11 - $Resto;
return $DiVG;
}
?>
Abraço ;)