Você está aqui: PHP ::: Boletos Bancários, Arquivos de Remessa e Retornos do Banco ::: Caixa Econômica Federal - Banco 104 |
Boleto Bancário PHP - Como montar a linha digitável (representação numérica do código de barras) e seu dígito verificador (Módulo 10) - Boleto Caixa EconômicaQuantidade de visualizações: 3763 vezes |
|
Esta dica fecha nossa série de estudos sobre os boletos bancários da Caixa Econômica (Banco 104). Na dica anterior vimos como montar o código de barras e o seu dígito verificador. E, uma vez montado o código de barras completo, já temos todas as informações para montar sua representação numérica, ou seja, a linha digitável do boleto. Dessa forma, é importante que você entenda bem as funções demonstradas nas dicas anteriores. Na Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro), a linha digitável, ou representação numérica, para a cobrança contém cinco campos, conforme discriminação a seguir: 1º Campo - Composto por: 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 digito verificador deste campo; 2º Campo - Composto pelas posições 6 a 15 do campo livre (posições 25 a 34 do código de barras) e digito verificador deste campo; 3º Campo - Composto pelas posições 16 a 25 do campo livre (posições 35 a 44 do código de barras) e digito verificador deste campo; 4º Campo - Dígito verificador geral do código de barras (posição 5 do código de barras); 5º 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 inclusão de zeros entre eles até compor as 14 posições do campo e sem edição (sem ponto e sem vírgula). Não obstante existam 10 posições, o valor nominal do documento não poderá exceder R$ 9.999.999,99. O cálculo que mostrarei a seguir está de acordo com as instruções do Manual de Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária Caixa - SIGCB - Versão 67.118 v024 micro e Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro). Tenha certeza de verificar sua versão do manual antes de usar o código apresentado. Dito isso, veja o código PHP completo para uma função que recebe o código de barras completo e retorna a linha digitável, devidamente espaçada e com os pontos, conforme recomendações do manual: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
<?php
// função que recebe o código de barras completo
// e monta a linha digitável do boleto
function montarLinhaDigitavel($codigoBarras){
// vamos nos concentrar no primeiro campo
$campo1 = substr($codigoBarras, 0, 3) .
substr($codigoBarras, 3, 1) . substr($codigoBarras, 19, 5);
// agora o segundo campo
$campo2 = substr($codigoBarras, 24, 10);
// agora o terceiro campo
$campo3 = substr($codigoBarras, 34, 10);
// agora o quarto campo
$campo4 = substr($codigoBarras, 4, 1);
// finalmente o quinto campo
$campo5 = substr($codigoBarras, 5, 4) .
substr($codigoBarras, 9, 10);
$linhaDigitavel = substr($campo1, 0, 5) . "." . substr($campo1, 5, 5) .
dvLinhaDigitavel($campo1) . " " . substr($campo2, 0, 5) . "."
. substr($campo2, 5, 5) . dvLinhaDigitavel($campo2) .
" " . substr($campo3, 0, 5) . "." . substr($campo3, 5, 5) .
dvLinhaDigitavel($campo3) . " " . $campo4 . " " . $campo5;
return $linhaDigitavel;
}
// atenção a esta função. Aqui nós usamos o Módulo 10
function dvLinhaDigitavel($valor){
// vamos inverter o valor
$valor = strrev($valor);
// vamos definir os índices de múltiplicação
$indices = "2121212121";
// e aqui a soma da multiplicação coluna por coluna
$soma = 0;
// fazemos a multiplicação coluna por coluna agora
for($i = 0; $i < strlen($valor); $i++){
$res = ((int)($valor[$i])) *
((int)($indices[$i]));
// Quando o resultado da multiplicação for um número
// com 2 dígitos, somar os 2 algarismos.
// Ex: (10: 1+0 = 1).
if($res > 9){
// vamos converter o valor númerico em string
$res = strval($res);
$res = ((int)($res[0]) + (int)($res[1]));
}
$soma = $soma + $res;
}
// obtemos o resto da divisão da soma por 10
$resto = $soma % 10;
// Se o resto da divisão for 0 (zero), o DV
// será 0 (zero).
if($resto == 0){
$digito = 0;
}
// Se o Total da Soma for inferior a 10, o DV corresponde
// à diferença entre 10 e o Total da Soma
else if($soma < 10){
$digito = 10 - $soma;
}
else{
// subtraímos onze pelo resto da divisão
$digito = 10 - $resto;
}
return $digito;
}
// ATENÇÃO: Se você ainda não entende os dados abaixo.
// revise as dicas anteriores antes de continuar
$banco = "104";
$moeda = "9";
$carteira = "1"; //
$emissao = "4"; // cedente
$nossoNumero = "222333777777777";
$valor = "321.12"; // sempre duas casas decimais
$vencimento = "23/08/2006";
$fator = fatorVencimento($vencimento);
$nossoNumeroCompleto = $carteira . $emissao . $nossoNumero;
$cedente = "005507";
$dvCedente = dvCodigoCedente($cedente);
$campoLivre = montarCampoLivre($cedente, $dvCedente,
$nossoNumeroCompleto);
$codigoBarras = montarCodigoBarras($banco, $moeda, $fator,
$valor, $campoLivre);
// agora que temos o código de barras completo, vamos
// montar a linha digitável
$linhaDigitavel = montarLinhaDigitavel($codigoBarras);
// e mostramos o resultado
echo "A linha digitável completa é: " . $linhaDigitavel;
?>
Ao executar este código PHP nós teremos o seguinte resultado: A linha digitável completa é: 10490.05505 77222.133348 77777.777713 4 32420000032112 Para não deixar o código desta dica muito longo, eu omiti algumas funções, que podem ser facilmente encontradas nas dicas anteriores. |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de PHP |
Veja mais Dicas e truques de PHP |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





