Вход Регистрация
Файл: whmcs/modules/gateways/boleto/include/funcoes_bb.php
Строк: 442
<?php

if (!defined("WHMCS"))
    die(
"This file cannot be accessed directly");

// +----------------------------------------------------------------------+
// | BoletoPhp - Versгo Beta                                              |
// +----------------------------------------------------------------------+
// | Este arquivo estб disponнvel sob a Licenзa GPL disponнvel pela Web   |
// | em http://pt.wikipedia.org/wiki/GNU_General_Public_License           |
// | Vocк deve ter recebido uma cуpia da GNU Public License junto com     |
// | esse pacote; se nгo, escreva para:                                   |
// |                                                                      |
// | Free Software Foundation, Inc.                                       |
// | 59 Temple Place - Suite 330                                          |
// | Boston, MA 02111-1307, USA.                                          |
// +----------------------------------------------------------------------+

// +----------------------------------------------------------------------+
// | Originado do Projeto BBBoletoFree que tiveram colaboraзхes de Daniel |
// | William Schultz e Leandro Maniezo que por sua vez foi derivado do    |
// | PHPBoleto de Joгo Prado Maia e Pablo Martins F. Costa                 |
// |                                                                      |
// | Se vc quer colaborar, nos ajude a desenvolver p/ os demais bancos :-)|
// | Acesse o site do Projeto BoletoPhp: www.boletophp.com.br             |
// +----------------------------------------------------------------------+

// +-------------------------------------------------------------------------------------------------------------------------+
// | Equipe Coordenaзгo Projeto BoletoPhp: <boletophp@boletophp.com.br>                                                              |
// | Desenvolvimento Boleto Banco do Brasil: Daniel William Schultz / Leandro Maniezo / Rogйrio Dias Pereira / Romeu Medeiros|
// +-------------------------------------------------------------------------------------------------------------------------+


$codigobanco "001";
$codigo_banco_com_dv geraCodigoBanco($codigobanco);
$nummoeda "9";
$fator_vencimento fator_vencimento($dadosboleto["data_vencimento"]);

//valor tem 10 digitos, sem virgula
$valor formata_numero($dadosboleto["valor_boleto"],10,0,"valor");
//agencia й sempre 4 digitos
$agencia formata_numero($dadosboleto["agencia"],4,0);
//conta й sempre 8 digitos
$conta formata_numero($dadosboleto["conta"],8,0);
//carteira 18
$carteira $dadosboleto["carteira"];
//agencia e conta
$agencia_codigo $agencia."-"modulo_11($agencia) ." / "$conta ."-"modulo_11($conta);
//Zeros: usado quando convenio de 7 digitos
$livre_zeros='000000';

// Carteira 18 com Convкnio de 8 dнgitos
if ($dadosboleto["formatacao_convenio"] == "8") {
    
$convenio formata_numero($dadosboleto["convenio"],8,0,"convenio");
    
// Nosso nъmero de atй 9 dнgitos
    
$nossonumero formata_numero($dadosboleto["nosso_numero"],9,0);
    
$dv=modulo_11("$codigobanco$nummoeda$fator_vencimento$valor$livre_zeros$convenio$nossonumero$carteira");
    
$linha="$codigobanco$nummoeda$dv$fator_vencimento$valor$livre_zeros$convenio$nossonumero$carteira";
    
//montando o nosso numero que aparecerб no boleto
    
$nossonumero $convenio $nossonumero ."-"modulo_11("$convenio$nossonumero");
}

// Carteira 18 com Convкnio de 7 dнgitos
if ($dadosboleto["formatacao_convenio"] == "7") {
    
$convenio formata_numero($dadosboleto["convenio"],7,0,"convenio");
    
// Nosso nъmero de atй 10 dнgitos
    
$nossonumero formata_numero($dadosboleto["nosso_numero"],10,0);
    
$dv=modulo_11("$codigobanco$nummoeda$fator_vencimento$valor$livre_zeros$convenio$nossonumero$carteira");
    
$linha="$codigobanco$nummoeda$dv$fator_vencimento$valor$livre_zeros$convenio$nossonumero$carteira";
    
//montando o nosso numero que aparecerб no boleto
    
$nossonumero $convenio.$nossonumero;
}

// Carteira 18 com Convкnio de 6 dнgitos
if ($dadosboleto["formatacao_convenio"] == "6") {
    
$convenio formata_numero($dadosboleto["convenio"],6,0,"convenio");
    
    if (
$dadosboleto["formatacao_nosso_numero"] == "1") {
        
        
// Nosso nъmero de atй 5 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";
        
//montando o nosso numero que aparecerб no boleto
        
$nossonumero $convenio $nossonumero ."-"modulo_11("$convenio$nossonumero");
    }
    
    if (
$dadosboleto["formatacao_nosso_numero"] == "2") {
        
        
// Nosso nъmero de atй 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";
    }
}

$dadosboleto["codigo_barras"] = $linha;
$dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha);
$dadosboleto["agencia_codigo"] = $agencia_codigo;
$dadosboleto["nosso_numero"] = $nossonumero;
$dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv;


// FUNЗХES
// Algumas foram retiradas do Projeto PhpBoleto e modificadas para atender as particularidades de cada banco

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 ;
$largo ;
$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
<?php
$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
<?php
    
if (substr($f,$i,1) == "0") {
      
$f2 $fino ;
    }else{
      
$f2 $largo ;
    }
?>
    src=imagens/b.gif width=<?=$f2?> height=<?=$altura?> border=0><img
<?php
  
}
}

// 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>
  <?php
//Fim da funзгo

function esquerda($entra,$comp){
    return 
substr($entra,0,$comp);
}

function 
direita($entra,$comp){
    return 
substr($entra,strlen($entra)-$comp,$comp);
}

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($year02);
    
$year substr($year22);
    if (
$month 2) {
        
$month -= 3;
    } else {
        
$month += 9;
        if (
$year) {
            
$year--;
        } else {
            
$year 99;
            
$century --;
        }
    }

    return ( 
floor((  146097 $century)    /  ) +
            
floor(( 1461 $year)        /  ) +
            
floor(( 153 $month +  2) /  ) +
                
$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 inteiros 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($linha04);
    
$p2 substr($linha195);
    
$p3 modulo_10("$p1$p2");
    
$p4 "$p1$p2$p3";
    
$p5 substr($p405);
    
$p6 substr($p45);
    
$campo1 "$p5.$p6";

    
// 2. Campo - composto pelas posiзoes 6 a 15 do campo livre
    // e livre e DV (modulo10) deste campo
    
$p1 substr($linha2410);
    
$p2 modulo_10($p1);
    
$p3 "$p1$p2";
    
$p4 substr($p305);
    
$p5 substr($p35);
    
$campo2 "$p4.$p5";

    
// 3. Campo composto pelas posicoes 16 a 25 do campo livre
    // e livre e DV (modulo10) deste campo
    
$p1 substr($linha3410);
    
$p2 modulo_10($p1);
    
$p3 "$p1$p2";
    
$p4 substr($p305);
    
$p5 substr($p35);
    
$campo3 "$p4.$p5";

    
// 4. Campo - digito verificador do codigo de barras
    
$campo4 substr($linha41);

    
// 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($linha514);

    return 
"$campo1 $campo2 $campo3 $campo4 $campo5"
}

function 
geraCodigoBanco($numero) {
    
$parte1 substr($numero03);
    
$parte2 modulo_11($parte1);
    return 
$parte1 "-" $parte2;
}

?>
Онлайн: 0
Реклама