From: <ot...@in...> - 2003-02-06 13:38:44
|
ola para todos, segue abaixo a classe que adaptei para o Banco Real, = est=E1 funcionando corretamente para boletos de cobran=E7a simples, se = alguem testar para cobran=E7as registradas e funcionar ok, de um alo. []s Otavio. <?php /* vim: set expandtab tabstop=3D4 shiftwidth=3D4: */ // = +----------------------------------------------------------------------+ // | phpBoleto v2.0 = | // = +----------------------------------------------------------------------+ // | Copyright (c) 1999-2001 Pablo Martins F. Costa, Jo=E3o Prado Maia = | // = +----------------------------------------------------------------------+ // | Este arquivo est=E1 sujeito a vers=E3o 2 da GNU General Public = License, | // | que foi adicionada nesse pacote no arquivo COPYING e est=E1 = dispon=EDvel | // | pela Web em http://www.gnu.org/copyleft/gpl.txt = | // | Voc=EA deve ter recebido uma c=F3pia da GNU Public License junto = com | // | esse pacote; se n=E3o, escreva para: = | // | = | // | Free Software Foundation, Inc. = | // | 59 Temple Place - Suite 330 = | // | Boston, MA 02111-1307, USA. = | // = +----------------------------------------------------------------------+ // | Autores: Jo=E3o Prado Maia <jp...@ph...> = | // | Pablo Martins F. Costa <pa...@us...> = | // | Ot=E1vio Bonvino <ot...@bo...> = | // = +----------------------------------------------------------------------+ // // @(#) $Id: class.banco.bancoreal.php,v 1.0 2003/02/05 20:50:00 jcpm = Exp $ // require_once(BOLETO_INC_PATH . "boletos" . BOLETO_SEPARADOR . "bancos" . = BOLETO_SEPARADOR . "class.banco.comum.php"); class Boleto_Banco_Bancoreal extends Boleto_Banco_Comum { function _modulo10real($num) { $soma =3D 0; $fator =3D 1; // Separacao dos numeros for ($i =3D strlen($num); $i > 0; $i--) {=20 // pega cada numero isoladamente=20 $numero =3D substr($num,$i-1,1); // Efetua multiplicacao do numero pelo (falor 10) $parcial =3D $numero * $fator;=20 if($parcial > 9) { $parcial =3D = intval(substr($parcial,0,1))+intval(substr($parcial,1,1)); } =20 // monta sequencia para soma dos digitos no (modulo 10) $soma +=3D $parcial; if ($fator =3D=3D 2) {=20 $fator =3D 1; } else { $fator =3D 2; // intercala fator de multiplicacao } } $resto =3D $soma % 10; $digito =3D 10 - $resto; if ($digito =3D=3D 10) { $digito =3D 0; } return $digito; } function geraDadosBanco($info) { // formatacao agencia/conta cedente $agencia =3D substr($info["agencia"], 0, 4); $conta =3D substr($info["conta_cedente"], 0, 7); // formatacao do valor=20 if($info["valor_documento"] =3D=3D 0) { $valor =3D "00000000000000"; } else { $v =3D str_replace("R\$", "", $info["valor_documento"]); $v =3D str_replace(chr(44), "", $v); $valor =3D sprintf("%010d", $v); } // vencimento $vence =3D explode("/", $info["vencimento"]); $dvence =3D $vence[0]; $mvence =3D $vence[1]; $avence =3D $vence[2]; $vcto =3D "$dvence/$mvence/$avence"; $fatorvcto =3D $this->_fatorVencimento($avence, $mvence, = $dvence); // formata o nosso numero para ter 13 campos com zeros a = esquerda $nnum =3D intval($info["nosso_numero"]); $nn =3D sprintf("%013d", $nnum); // digito verificador do boleto $DAC =3D $this->_modulo10real("$agencia$conta$nn"); $moeda =3D "9"; $codigobanco =3D "356"; // 43 numeros para o calculo do digito verificador $dvcampo =3D = "$codigobanco$moeda$fatorvcto$valor$agencia$conta$DAC$nn"; $dv =3D $this->_modulo11($dvcampo); // Numero para o codigo de barras com 44 digitos $num =3D = "$codigobanco$moeda$dv$fatorvcto$valor$agencia$conta$DAC$nn"; // Devolve a linha digitavel $linha_digitavel =3D $this->_montaLinha($num); $codigo_banco =3D $this->_geraCodigoBanco($codigobanco); return array( "linha_digitavel" =3D> $linha_digitavel, "agencia_codigo" =3D> $agencia." / ".$conta." / ".$DAC, "codigo_barras" =3D> $num, "codigo_banco" =3D> $codigo_banco, "nosso_numero" =3D> $nn ); } } ?> |