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
);
}
}
?> |