Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde a todos do forum!
Pessoal do iMasters venho novamente solicitar se possivel à ajuda de vocês!
"Diante mão gostaria de dizer que com à colaboração de vocês deste forum tenho conseguido aprender um pouco da linguagem php!"
Mais vamos ao meu Problema no momento é.
Estou tentando criar um script para gerar boleto direto no site com alguns dados vindos do banco de dados mas está dando um error desse tipo "Fatal error: Call to undefined function fator_vencimento() in C:\wamp\www\prosaber\boleto\include\funcoesbb.php on line 6".
já tentei corrige o erro mais ainda não conseguir nada, se alguem aquir no forum poder me ajudar, desde já agradeço.
segue abaixo o script que gera as funções como codigo de barra, data de vencimento etc.
<?php
//formatando os dados
$codigobanco = "001";
$nummoeda = "9";
$fator_vencimento = fator_vencimento($dadosboleto["data_vencimento"]);
/*
Linha digitavel
*/
//valor tem 10 digitos, sem virgula
$valor = formata_numero($dadosboleto["valor_boleto"],10,0,"valor");
//convenio tem 6 digitos
$convenio = formata_numero($dadosboleto["convenio"],6,0,"convenio");
//agencia é sempre 4 digitos
$agencia = formata_numero($dadosboleto["agencia"],4,0);
//conta é sempre 8 digitos
$conta = formata_numero($dadosboleto["conta"],8,0);
$carteira = $dadosboleto["carteira"];
if ($dadosboleto["formatacao_nosso_numero"] == "1") {
// 12 dígitos
$nossonumero = formata_numero($dadosboleto["nosso_numero"],5,0);
$dv = modulo_11("$codigobanco$nummoeda$fator_vencimento$valor$convenio$nossonumero$agencia$conta$carteira");
$linha = "$codigobanco$nummoeda$dv$fator_vencimento$valor$convenio$nossonumero$agencia$conta$carteira";
//recolocando o nosso numero com DV
$nossonumero = $convenio . $nossonumero ."-". modulo_11("$convenio$nossonumero");
$agencia_codigo = $agencia."-". modulo_11($agencia) ." / ". $conta ."-". modulo_11($conta);
}
if ($dadosboleto["formatacao_nosso_numero"] == "2") {
// 17 dígitos
$nservico = "21";
$nossonumero = formata_numero($dadosboleto["nosso_numero"],17,0);
$dv = modulo_11("$codigobanco$nummoeda$fator_vencimento$valor$convenio$nossonumero$nservico");
$linha = "$codigobanco$nummoeda$dv$fator_vencimento$valor$convenio$nossonumero$nservico";
$agencia_codigo = $agencia."-". modulo_11($agencia) ." / ". $conta ."-". modulo_11($conta);
}
$dadosboleto["codigo_barras"] = $linha;
$dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha);
$dadosboleto["agencia_codigo"] = $agencia_codigo ;
$dadosboleto["nosso_numero"] = $nossonumero;
/*
FUNÇÕES MINHAS ;)
*/
function formata_numero($numero,$loop,$insert,$tipo = "geral") {
if ($tipo == "geral") {
$numero = str_replace(",","",$numero);
while(strlen($numero)<$loop){
$numero = $insert . $numero;
}
}
if ($tipo == "valor") {
/*
retira as virgulas
formata o numero
preenche com zeros
*/
$numero = str_replace(",","",$numero);
while(strlen($numero)<$loop){
$numero = $insert . $numero;
}
}
if ($tipo = "convenio") {
while(strlen($numero)<$loop){
$numero = $numero . $insert;
}
}
return $numero;
}
function fbarcode($valor){
$fino = 1 ;
$largo = 3 ;
$altura = 50 ;
$barcodes[0] = "00110" ;
$barcodes[1] = "10001" ;
$barcodes[2] = "01001" ;
$barcodes[3] = "11000" ;
$barcodes[4] = "00101" ;
$barcodes[5] = "10100" ;
$barcodes[6] = "01100" ;
$barcodes[7] = "00011" ;
$barcodes[8] = "10010" ;
$barcodes[9] = "01010" ;
for($f1=9;$f1>=0;$f1--){
for($f2=9;$f2>=0;$f2--){
$f = ($f1 * 10) + $f2 ;
$texto = "" ;
for($i=1;$i<6;$i++){
$texto .= substr($barcodes[$f1],($i-1),1) . substr($barcodes[$f2],($i-1),1);
}
$barcodes[$f] = $texto;
}
}
//Desenho da barra
//Guarda inicial
?><img src=imagens/p.gif width=<?=$fino?> height=<?=$altura?> border=0><img
src=imagens/b.gif width=<?=$fino?> height=<?=$altura?> border=0><img
src=imagens/p.gif width=<?=$fino?> height=<?=$altura?> border=0><img
src=imagens/b.gif width=<?=$fino?> height=<?=$altura?> border=0><img
<?
$texto = $valor ;
if((strlen($texto) % 2) <> 0){
$texto = "0" . $texto;
}
// Draw dos dados
while (strlen($texto) > 0) {
$i = round(esquerda($texto,2));
$texto = direita($texto,strlen($texto)-2);
$f = $barcodes[$i];
for($i=1;$i<11;$i+=2){
if (substr($f,($i-1),1) == "0") {
$f1 = $fino ;
}else{
$f1 = $largo ;
}
?>
src=imagens/p.gif width=<?=$f1?> height=<?=$altura?> border=0><img
<?
if (substr($f,$i,1) == "0") {
$f2 = $fino ;
}else{
$f2 = $largo ;
}
?>
src=imagens/b.gif width=<?=$f2?> height=<?=$altura?> border=0><img
<?
}
}
// Draw guarda final
?>
src=imagens/p.gif width=<?=$largo?> height=<?=$altura?> border=0><img
src=imagens/b.gif width=<?=$fino?> height=<?=$altura?> border=0><img
src=imagens/p.gif width=<?=1?> height=<?=$altura?> border=0>
<?
} //Fim da função
function esquerda($entra,$comp){
return substr($entra,0,$comp);
}
function direita($entra,$comp){
return substr($entra,strlen($entra)-$comp,$comp);
}
/*
FUNÇÕES REAPROVEITADAS/CORRIGIDAS DO PHPBOLETO
*/
/*
Fator vencimento, phpboleto
*/
function fator_vencimento($data) {
$data = split("/",$data);
$ano = $data[2];
$mes = $data[1];
$dia = $data[0];
return(abs((_dateToDays("1997","10","07")) - (_dateToDays($ano, $mes, $dia))));
}
function _dateToDays($year,$month,$day)
{
$century = substr($year, 0, 2);
$year = substr($year, 2, 2);
if ($month > 2) {
$month -= 3;
} else {
$month += 9;
if ($year) {
$year--;
} else {
$year = 99;
$century --;
}
}
return ( floor(( 146097 * $century) / 4 ) +
floor(( 1461 * $year) / 4 ) +
floor(( 153 * $month + 2) / 5 ) +
$day + 1721119);
}
/*
#################################################
FUNÇÃO DO MÓDULO 10 RETIRADA DO PHPBOLETO
ESTA FUNÇÃO PEGA O DÍGITO VERIFICADOR DO PRIMEIRO, SEGUNDO
E TERCEIRO CAMPOS DA LINHA DIGITÁVEL
#################################################
*/
function modulo_10($num) {
$numtotal10 = 0;
$fator = 2;
for ($i = strlen($num); $i > 0; $i--) {
$numeros[$i] = substr($num,$i-1,1);
$parcial10[$i] = $numeros[$i] * $fator;
$numtotal10 .= $parcial10[$i];
if ($fator == 2) {
$fator = 1;
}
else {
$fator = 2;
}
}
$soma = 0;
for ($i = strlen($numtotal10); $i > 0; $i--) {
$numeros[$i] = substr($numtotal10,$i-1,1);
$soma += $numeros[$i];
}
$resto = $soma % 10;
$digito = 10 - $resto;
if ($resto == 0) {
$digito = 0;
}
return $digito;
}
/*
#################################################
FUNÇÃO DO MÓDULO 11 RETIRADA DO PHPBOLETO
MODIFIQUEI ALGUMAS COISAS...
ESTA FUNÇÃO PEGA O DÍGITO VERIFICADOR:
NOSSONUMERO
AGENCIA
CONTA
CAMPO 4 DA LINHA DIGITÁVEL
#################################################
*/
function modulo_11($num, $base=9, $r=0) {
$soma = 0;
$fator = 2;
for ($i = strlen($num); $i > 0; $i--) {
$numeros[$i] = substr($num,$i-1,1);
$parcial[$i] = $numeros[$i] * $fator;
$soma += $parcial[$i];
if ($fator == $base) {
$fator = 1;
}
$fator++;
}
if ($r == 0) {
$soma *= 10;
$digito = $soma % 11;
//corrigido
if ($digito == 10) {
$digito = "X";
}
/*
alterado por mim, Daniel Schultz
Vamos explicar:
O módulo 11 só gera os digitos verificadores do nossonumero,
agencia, conta e digito verificador com codigo de barras (aquele que fica sozinho e triste na linha digitável)
só que é foi um rolo...pq ele nao podia resultar em 0, e o pessoal do phpboleto se esqueceu disso...
No BB, os dígitos verificadores podem ser X ou 0 (zero) para agencia, conta e nosso numero,
mas nunca pode ser X ou 0 (zero) para a linha digitável, justamente por ser totalmente numérica.
Quando passamos os dados para a função, fica assim:
Agencia = sempre 4 digitos
Conta = até 8 dígitos
Nosso número = de 1 a 17 digitos
A unica variável que passa 17 digitos é a da linha digitada, justamente por ter 43 caracteres
Entao vamos definir ai embaixo o seguinte...
se (strlen($num) == 43) { não deixar dar digito X ou 0 }
*/
if (strlen($num) == "43") {
//então estamos checando a linha digitável
if ($digito == "0" or $digito == "X" or $digito > 9) {
$digito = 1;
}
}
return $digito;
}
elseif ($r == 1){
$resto = $soma % 11;
return $resto;
}
}
/*
Montagem da linha digitável - Função tirada do PHPBoleto
Não mudei nada
*/
function monta_linha_digitavel($linha) {
// Posição Conteúdo
// 1 a 3 Número do banco
// 4 Código da Moeda - 9 para Real
// 5 Digito verificador do Código de Barras
// 6 a 19 Valor (12 inteeeiros e 2 decimais)
// 20 a 44 Campo Livre definido por cada banco
// 1. Campo - composto pelo código do banco, código da moéda, as cinco primeiras posições
// do campo livre e DV (modulo10) deste campo
$p1 = substr($linha, 0, 4);
$p2 = substr($linha, 19, 5);
$p3 = modulo_10("$p1$p2");
$p4 = "$p1$p2$p3";
$p5 = substr($p4, 0, 5);
$p6 = substr($p4, 5);
$campo1 = "$p5.$p6";
// 2. Campo - composto pelas posiçoes 6 a 15 do campo livre
// e livre e DV (modulo10) deste campo
$p1 = substr($linha, 24, 10);
$p2 = modulo_10($p1);
$p3 = "$p1$p2";
$p4 = substr($p3, 0, 5);
$p5 = substr($p3, 5);
$campo2 = "$p4.$p5";
// 3. Campo composto pelas posicoes 16 a 25 do campo livre
// e livre e DV (modulo10) deste campo
$p1 = substr($linha, 34, 10);
$p2 = modulo_10($p1);
$p3 = "$p1$p2";
$p4 = substr($p3, 0, 5);
$p5 = substr($p3, 5);
$campo3 = "$p4.$p5";
// 4. Campo - digito verificador do codigo de barras
$campo4 = substr($linha, 4, 1);
// 5. Campo composto pelo valor nominal pelo valor nominal do documento, sem
// indicacao de zeros a esquerda e sem edicao (sem ponto e virgula). Quando se
// tratar de valor zerado, a representacao deve ser 000 (tres zeros).
$campo5 = substr($linha, 5, 14);
return "$campo1 $campo2 $campo3 $campo4 $campo5";
?>
<?php
}
?>Carregando comentários...