CnabPHP icon indicating copy to clipboard operation
CnabPHP copied to clipboard

Enviar DAC (dígito verificador) do Nosso Número no Itau - Carteira 109

Open lfviegas opened this issue 3 years ago • 1 comments

Olá pessoal. Estamos implementando a classe utilizando o Itaú, na carteira 109.

Utilizei o exemplo da home do repositório e observei que nele há chave apenas para informar o nosso número, com os 8 dígitos. Não encontramos o DAC no arquivo de remessa.

Também não encontrei na classe método para gerar o DAC do nosso número, de acordo com a documentação do Itaú.

Isso já foi implementado?

Se não foi, há pelo menos o método para incluir o DAC no layout após o cálculo?

Obrigado.

lfviegas avatar Jan 31 '22 17:01 lfviegas

Pessoal, fiz uma rotina para calcular o DAC do Itau conforme o manual. Segue abaixo para quem tiver interesse.

Como estou utilizando

Após calcular, concateno o DAC com o Nosso Número e envio na chave 'nosso_numero' do array que vai como parâmetro para o método inserDetalhe. Dessa forma, envio um 'nosso_numero' com 8 caracteres de tamanho, sendo os 7 iniciais o nosso número e o 8º o DAC calculado pela função abaixo:

Código:

`public function nosso_numero_dac($agencia, $conta, $carteira, $nosso_numero){

		$soma 	= 0;

        $agencia 	= preg_replace( '/[^0-9]/', '', $agencia);
        $conta 		= preg_replace( '/[^0-9]/', '', $conta);
        $carteira 	= preg_replace( '/[^0-9]/', '', $carteira);

        $num 		= $agencia.$conta.$carteira.$nosso_numero;
        $sequencia  = "12121212121212121212";

        if(strlen($num) != strlen($sequencia)){
        	die("Erro ao gerar DAC nosso número. Tamanhos diferentes entre a sequência padrão e agência/conta/carteira/nosso número.");
        } 

        /* Separacao dos numeros */
        for ($i = strlen($num); $i > 0; --$i) {
            $parcial[$i] = substr($num, $i - 1, 1) * substr($sequencia, $i - 1, 1);
            $soma += $parcial[$i];
        }

        $digito = $soma % 10;
        
        $dac = 10-$digito;
        if($dac == 10){
        	$dac = 0;
        }

        return $dac;
	}`

lfviegas avatar Feb 01 '22 12:02 lfviegas