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. |