|
From: <ot...@in...> - 2003-02-14 14:39:41
|
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. |