Olá a todos.
O código de barras de um boleto bancário é formado por diversas variáveis, como código do banco, tipo de moeda, digito verificador, etc. veja a baixo:
001 9 1 6269 0000040000 0000001243245001124462217
Em azul escuro está o número do banco, no exemplo é o banco do Brasil;
Em vermelho está o tipo da moeda, que no caso é Reais;
Em verde é o Digito Verificador, único valor que termos que calcular;
Em azul claro está o fator de vencimento que é a diferença de dias contata desde 07/10/1997 à data do vencimento do boleto;
Em laranja está o valor do boleto multiplicado por 100;
Em preto é um campo livre, que fica a critério de cada banco. A maioria dos bancos formata o campo assim:
0000001243245001124462217
Em azul continua livre;
Em laranja o Nosso Número;
Em verde o número da carteira da empresa;
Calculando Verificador com PHP
Bom, praticamente todos os valores do código nós podemos encontrar facilmente, exceto o digito verificador, o qual iremos calcular. Seguindo o modelo da FEBRABAN temos que multiplicar cada número da barras por um fator determinado por ela, veja a baixo:
4 3 2 9 0 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 9 8 7 6 5 4 3 2
0 0 1 9 1 6 2 6 9 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 1 2 4 3 2 4 5 0 0 1 1 2 4 4 6 2 2 1 7
Cada digito do código de barras é multiplicado pelo número logo a baixo dele na representação acima, depois os resultados das multiplicações são somados. O resultado da soma é dividido por 11, depois o número 11 é subtraído pelo resto da divisão e então temos o digito verificador. Veja a baixo em PHP:
codVerificador = $resultado;
$barras = substr_replace($barras, $resultado, 4, 1);
return $barras;
}
?>
Pronto galera é isso ai, qualquer dúvida deixe um comentário!
Em breve estarei publicando uma biblioteca PHP para tratamento de código de barras, linha digitável, e outros valores referentes a boletos bancários.
Até mais!
Bom dia amigo, possui para c++? Pederia me enviar por e-mail?
Não possuo Thiago.
Bom dia, estou tendo problemas com o Digito verificador, essa função serve para o itau tambem?
Desde já obragado
Opa Jefferson, funciona sim.
Obrigado amigo.
Eu peguei essa bucha e nunca nem tinha visto, e pelo que vi o problema é o codigo verificador que está assim:
$resto2 = modulo_11($numero, 9, 1);
$digito = 11 – $resto2;
if ($digito == 0 || $digito == 1 || $digito == 10 || $digito == 11) {
$dv = 1;
} else {
//$dv = 2;
$dv = $digito;
}
return $dv;
pelo que li, não deve ser dessa forma a algum tempo, é isso mesmo?
vamos dizer que foi “trocado” por essa function sua?
Pode se dizer que sim.
da erro no nessa linha:
retirei os 2 “-“pois dava erro…
$this -> codVerificador = $resultado;
Fatal error: Using $this when not in object context
Bom dia.
Acho que a sequência de multiplicadores que você está usando está errada. De acordo com um documento da Febraban, os 5 primeiros dígitos da sua sequência de multiplicadores deveria ser 5 4 3 2 9 no lugar de 4 3 2 9 0. Segue documento da Febraban consultado (este cálculo está na página 16): https://cmsportal.febraban.org.br/Arquivos/documentos/PDF/Layout%20-%20C%C3%B3digo%20de%20Barras%20-%20Vers%C3%A3o%205%20-%2001_08_2016.pdf