Inicialmente utilizamos como base o script do projeto BoletoPHP (neste site tem vários códigos prontos de geração de boletos em PHP para vários bancos), porém, provável que o Bancoob / Sicoob mudou algo nos seus parâmetros e o código não funciona mais. Já enviamos a correção ao projeto do BoletoPHP mas parece que não foi postado.
Segue abaixo a fórmula correta para o cálculo:
if(!function_exists(formata_numdoc))
{
function formata_numdoc($num,$tamanho)
{
while(strlen($num)<$tamanho)
{
$num="0".$num;
}
return $num;
}
}
$NossoNumero = formata_numdoc(12345,7); // At� 7 d�gitos, n�mero sequencial iniciado em 1 (Ex.: 1, 2...)
$qtde_nosso_numero = strlen($NossoNumero);
$sequencia = formata_numdoc($agencia,4).formata_numdoc(str_replace("-","",$num_contrato_con),10).formata_numdoc($NossoNumero,7);
$cont=0;
for($num=0;$num<=strlen($sequencia);$num++)
{
$cont++;
if($cont == 1)
{
$constante = 3;
}
if($cont == 2)
{
$constante = 1;
}
if($cont == 3)
{
$constante = 9;
}
if($cont == 4)
{
$constante = 7;
$cont = 0;
}
$calculoDv = $calculoDv + (substr($sequencia,$num,1) * $constante);
}
$Resto = $calculoDv % 11;
if($Resto == 0 || $Resto == 1)
{
$Dv = 0;
}
else
{
$Dv = 11 - $Resto;
}
$dadosboleto["nosso_numero"] = $NossoNumero . $Dv;
Depois que você fizer os ajustes em seu código, poderá testar se seu boleto está sendo gerado corretamente usando a planilha do Sicoob / Bancoob.
Em anexo logo abaixo tem download do código completo do boleto e a planilha de testes para download.
Arquivos remessa p/ bancos
E se você procura geração de arquivo remessa para bancos, acesse este site: RemessaPHP
Grande abraço.
Samuel de L. Hantschel
Samuca Webdesign
PS: Obrigado ao Murillo Vasconcelos H. B. Castro pela colaboração na correção do dígito verificador =)
Agradeço também ao Moises Coffani pela contribuição com a carteira registrada (em anexo neste artigo).