
O excelente projeto Boleto PHP já virou referencia nacional para qualquer desenvolver que deseja criar cobrança usando boletos.
O projeto trás no meio de seus fontes o modelo do Bancoob que também pode ser utilizado para layouts do Sicoob pois tratá-se do mesmo banco.
Após aderimos aos Sicoob para gerarmos os boletos da InHosting nos deparamos com uma certa dificuldade em acertar o campo “Nosso Número” pois ele, diferente de outros bancos, possui uma regra para calcular um dígito verificador.
O Sicoob gentilmente nos cedeu uma planilha que continha todos os cálculos necessários além de permitir realizar simulações.
Para implementá-la em PHP é muito simples, procure a variável;
$dadosboleto["nosso_numero"]
Troque ela pelo código abaixo;
$NossoNumero = 1234; // Coloque o seu número, até 10 dígitos
$calculoDv = 239 + ($NossoNumero{0} * 1) + ($NossoNumero{1} * 9) + ($NossoNumero{2} * 7) + ($NossoNumero{3} * 3);
$Resto = $calculoDv % 11;
$Dv = 11 – $Resto;
if ($Dv == 0) $Dv = 0;
if ($Dv == 1) $Dv = 0;
if ($Dv > 9) $Dv = 0;
$dadosboleto["nosso_numero"] = $NossoNumero . $Dv;
Prontinho, o cálculo está feito. Apenas preste atenção para o $calculoDv, ele deve multiplicar cada dígito do seu número pela tabela deste arquivo;
http://inhosting.com.br/blog/wp-content/uploads/2011/07/Calculo-nn.xlsx
Se seu número possuir 5 digitos, acrescente no cálculo + ($NossoNumero{4} * 4); e assim por diante sempre multiplicando pelo valor dado na tabela do arquivo citado acima, o máximo de dígitos que você poderá trabalhar serão 10.
Utilize o Sicoob Cedente para auxiliar nos testes, ele pode ser baixado pelo próprio NetBanking do Sicoob.



julho 18th, 2011
Blog Admin
Posted in
Tags:
Existe tambem uma biblioteca em php que facilita a implementacao de novos bancos e principalmente a integracao com sistemas PHP.
A biblioteca pode ser baixada aqui https://github.com/drupalista-br/Boleto/wiki/Projeto-Boletophp-API
Obrigado pela visita e pela excelente dica, realmente muito valiosa.
Muito obrigado mesmo!
Continuo com dificuldades. Pela análise da planilha excel, percebe-se que para o cálculo do DV é necessário também o numero da cooperativa e o número do cedente, dados que não vi nesse cálculo. No exemplo mostrado para acrescentar um quinto algarismo ao nosso número, colocou-se a multiplicação dele por 4 ( + ($NossoNumero{4} * 4) ), ocorre que de acordo com a tabela excel cada número é multiplicado sempre por 1, 9, 7 ou 3.
Luiz, os demais dados que fazem parte do cálculo devem ser configurados no próprio PHP Boleto. Veja que este artigo trata apenas o cálculo do nosso número e não do boleto todo pois o layout do Bancoob já faz todos os outros cálculos para você, exceto do nosso número que deve ser calculado a parte. Um grande abraço.
Ainda não consegui implementar. O problema continua sendo o cálculo do DV, pois o número da agencia influencia no cálculo do DV.
DV de um determinado nosso número em uma agência vai ser diferente desse mesmo nosso número em outra agência.
E ainda não consegui entender por que para acrescentar outro dígito teremos que multiplicar por 4, já que na tabela do excel não existe esse 4 em lugar nenhum!
De onde vem esse 239 no calculo do DV?
Dê uma olhada na planilha do Excel, um grande abraço.
alguem de voces nao teria esse projeto funcionando 100%? Se tiver me envie por gentileza no email. juniorborys@gmail.com
Olá, a inhosting utiliza normalmente. Caso seja cliente abra um ticket em sua área de cliente que teremos o prazer de lhe fornecer os arquivos.
Olá.
Depois de muito estudar encontrei a solução. Realmente ficou um pouco vaga as explicações acima, então resolvi ajudar:
Segundo a documentação do Sicob:
NossoNumero – deve começar com 1 e pode ter até 7 dígitos
cooperativa_agencia – exemplo: 3249
numero_cliente: geralmente (mas nem sempre) o mesmo número da conta, exemplo: 7341-5
$NossoNumero = ’1′.formata_numdoc($IdDoSeuSistemaAutoIncremento,6); // Ate 7 digitos, iniciado em 1 (Ex.: 1000001)
$qtde_nosso_numero = strlen($NossoNumero);
$sequencia = formata_numdoc($cooperativa_agencia,4).formata_numdoc(str_replace(“-”,”",$numero_cliente),10).formata_numdoc($NossoNumero,7);
$cont=0;
for($num=0;$num 9) $Dv = 0;
$dadosboleto["nosso_numero"] = $NossoNumero . $Dv;
Abraço.
Samuca
http://www.samuca.eti.br
O blog não aceita alguns caracteres de programação. Me procurem no meu site que eu passo o código: http://www.samuca.eti.br.
Olá, seus comentários foram aprovados, obrigado por ajudar no conteúdo.