|
From: Alex B. <fe...@uo...> - 2003-02-14 18:44:28
|
Ot=E1vio,
Implementei essas mudan=E7as no c=F3digo do Itau, mas ele continua =
reclamando que o c=F3digo de barras =E9 invalido... veja alinha que foi =
gerada:
34191.75611 58078.680749 33415.960005 8 19630000001995=20
Abra=E7o...
----- Original Message -----=20
From: Ot=E1vio Bonvino=20
To: php...@li...=20
Sent: Friday, February 14, 2003 12:38 PM
Subject: [Phpboleto-devel] Erro na gera=E7=E3o do DV para ITAU e REAL =
e quem sabe outros.
Pessoal,
verifiquei um problema com meus boletos gerados para o REAL, e pelas =
mensagens anteriores deve ser o mesmo problema para o ITAU, pois fui =
pagar um dos boletos do REAL no ITAU e ele indicou o problema.
O problema =E9 quando o resto da divis=E3o por 11, no calculo do =
modulo11 do digito verificar =E9 0 ou 1 ou 10, assim a fun=E7=E3o =
original _modulo11 retorna 0 quando isto ocorre, oque na verdade tem que =
retornar 1 para todos estes casos (pelo menos =E9 oque esta dizendo a =
documenta=E7=E3o do banco real para calculo do modulo 11).
Assim acrescentei um op=E7=E3o nesta fun=E7=E3o para que retorna-se o =
valor correto nestes casos, n=E3o alterei a fun=E7=E3o todos pois n=E3o =
sei como se da isto para outros bancos. Assim, fun=E7=E3o deve ser =
chamada com o parametro r =3D 2, por exemplo, na minha classe do banco =
real postada anteriormente, a linha de calculo do dv deve ser alterada =
de :
$dv =3D $this->_modulo11($dvcampo);
para
$dv =3D $this->_modulo11($dvcampo,9,2);
e no arquivo classe.banco.comum.php a fun=E7=E3o _modulo11 deve ser =
alterada o ultimo if que calcula o resto no seguinte :
/* Calculo do modulo 11 */
if ($r =3D=3D 0) {=20
$soma *=3D 10;
$digito =3D $soma % 11;
if ($digito =3D=3D 10) {
$digito =3D 0;
} =20
return $digito;
} elseif ($r =3D=3D 1){
$resto =3D $soma % 11;
return $resto;=20
} elseif ($r =3D=3D 2) {=20
$resto =3D $soma % 11;
if($resto =3D=3D 0 || $resto =3D=3D 1 || $resto =3D=3D 10) =
{
$digito =3D 1;
} else {
$digito =3D 11 - $resto;=20
} =20
return $digito;
}
notem que somente acrescentei uma op=E7=E3o elseif a mais, caso o =
parametro r seja igual a 2, calculando o digito de acordo com a =
documenta=E7=E3o do real.
Abra=E7os a todos e espero ter ajudado em algu.
Otavio.
|