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