Dígito Verificador da Chave de Acesso – saiba como calcular!

como calcular o digito verificador da chave de acesso

Passo a Passo para Você Calcular o Dígito Verificador da Chave de Acesso em seus Documentos.

Um Documento Fiscal Eletrônico (DFe) é identificado a partir da sua chave de acesso, que é gerada com base em dados extraídos do conteúdo do próprio DFe e possui um Dígito Verificador.

Atualmente, documentos como a Nota Fiscal Eletrônica (NFe), Nota Fiscal de Consumidor Eletrônica (NFCe), Conhecimento de Transporte Eletrônico (CTe), Conhecimento de Transporte Eletrônico para Outros Serviços (CTe OS) e Manifesto de Documento Fiscal Eletrônico (MDFe) possuem a mesma estrutura de composição da chave de acesso, a qual veremos mais adiante.

No entanto, geralmente a dúvida que surge é quanto a geração do último componente da chave: o Dígito Verificador (DV), visto que é preciso realizar um cálculo para encontrá-lo.

Neste artigo, você vai aprender sobre como calcular o dígito verificador da chave de acesso do seu Documento Fiscal Eletrônico.

LÓGICA DO CÁLCULO

Para nosso exemplo, vamos tomar como base a geração do DV da chave de acesso da Nota Fiscal Eletrônica (NFe). Entretanto, o mesmo procedimento é válido para os outros DFes citados no início do artigo. A chave de uma NFe é composta por campos retirados do próprio XML do documento. São eles: Código da UF + Data da emissão + CNPJ do Emitente + Modelo + Série + Número da NFe + tipo de emissão + Código Numérico + Dígito Verificador.

De uma forma mais visual: 43–1712–07.364.617/0001–35–55–000–000.012.014–1-00012014–6. Para calcular o DV de uma nota, vamos utilizar todos os outros 43 primeiros caracteres, ou seja, usaremos os campos: Código da UF + Data da emissão + CNPJ do Emitente + Modelo + Série + Número da NFe + tipo de emissão + Código Numérico, ficando da seguinte forma: 4317120736461700013555000000012014100012014.

Conforme o Manual de Orientações do Contribuinte v 6.00, página 143, o cálculo do DV é feito através do módulo 11 destes 43 primeiros algarismos da chave. A partir daí, você deve multiplicar cada algarismo (da direita para a esquerdapelos multiplicadores 2,3,4,5,6,7,8,9. Depois, realize a soma de todos os resultados e divida o total por 11.

O Dígito Verificador será o resultado da diferença entre 11 e o resultado da divisão (11 – resto).

NA PRÁTICA, O QUE ISSO SIGNIFICA?

Aplicando a teoria explicada acima em nossa chave anterior, utilizada como exemplo, teremos:

tabela com a criação do dígito verificador da chave de acesso

Somando cada resultado do produto entre o algarismo da chave e o multiplicador correspondente, temos:

 16 + 9 + 2 + 63 + 8 + 14 + 0 + 35 + 12 + 18 + 8 + 54 + 8 + 49 + 0 + 0 + 0 + 3 + 6 + 45 + 40 + 35 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 12 + 0 + 4 + 12 + 2 + 0 + 0 + 0 + 6 + 10 + 0 + 3 + 8 = 489.

Dividindo: 489 / 11 = 44, tendo 5 como resto. Então, aplica-se na fórmula de 11 – resto: 11 – 5 = 6. O Dígito Verificador de nossa chave de acesso é o número 6.

Abaixo, confira um exemplo de cálculo feito em Visual Basic 6 (VB6), onde é necessário passar uma chave com 43 dígitos e a função retorna o dígito verificador para a chave passada:

Calcula DV

PublicFunctionCalculaDV(chave43 AsString)    Dimindice, multiplicador AsInteger    Dimsoma, resto, digito_verificador AsInteger        'Zera a soma    soma = 0    'Multiplicador inicia com 9    multiplicador = 2        'Multiplica do 43° até o 1° caractere da chave    Forindice = Len(chave43) ToStep-1        'Multiplica cada digito da chave pelo multiplicador correspondente e soma        soma = soma + (Mid(chave43, indice, 1) * multiplicador)        multiplicador = multiplicador + 1         'Se multiplicador chegou a 2, volta para 9        If(multiplicador > 9) Thenmultiplicador = 2    Nextindice     'Pega o resto da divisão através da função mod    resto = soma Mod11        'Dígito verificador é o resultado da subtração 11 - resto    digito_verificador = 11 - resto        'Testa se o DV é maior = 10    If(digito_verificador >= 10) Thendigito_verificador = 0        'Retorna o DV    CalculaDV = Abs(digito_verificador)EndFunction

E então? Com esse exemplo ficou muito mais simples calcular o dígito verificador da chave de acesso, não é mesmo? Compartilhe com a sua equipe!

Consulta e Download Pela Chave de Acesso não é mais permitida

O CONFAZ proibiu a consulta e download dos xmls de Documentos Fiscais Eletrônicos informando apenas a chave de acesso. Agora para realizar estes procedimentos será necessário utilizar o Certificado Digital do emitente:

Não deixe de nos seguir nas Redes Sociais!

Gostou do Post? Caso você não conheça nossa API entre em contato conosco! 

 

19 comentários em “Dígito Verificador da Chave de Acesso – saiba como calcular!

  1. Mauricio Berni Responder

    Boa explicação. Só faltou informar o que acontece quando o resto da divisão é 0 ou 1, o que é um problema já que o cálculo retorna um número de 2 algarismos ao invés de 1. Nesses casos se não me engano o se considera o dígito verificador = 0;

    No código VB vocês fazem essa verificação, porém está incorreto testar se o digito_verificador é igual 1, o correto seria testar se o resto da divisão é igual a 1, mas mesmo assim seria desnecessário já que o (digito_verificador >= 10) pega todos os casos.

    E não deveria ser calculado o dígito verificador depois ao invés de dentro do “for” ?

    • Fabi Silva Responder

      Olá Maurício!! Muito obrigada pela tua observação. Com isso alteramos nosso post.
      Dê uma olhada!

      Grande abraço!!

      Fabi Silva

    • Leonardo Responder

      Olá Walery, tudo bem?
      Ficamos mega felizes com seu comentário. É sempre uma alegria saber que nossos conteúdos contribuíram com alguém.
      Um grande abraço!

  2. Walery S Badaró Responder

    eI , então… Na verdade não funcionou não. O validador gerado com a formula não estava correto.

    • Leonardo Responder

      Olá Sérgio, tudo bem?
      O código numérico (cNF) é um campo que pode ser gerado pelo próprio software que emite a nota, ele pode ser um número aleatório de 8 dígitos que vai informado no campo 2 da linha B.
      Caso não tenha sido gerado um código numérico aleatório, o cNF vai ser o mesmo numero da nota (nNF.)Temos este post que fala sobre o código numérico https://blog.nstecnologia.com.br/projeta-sua-nfe/
      Espero ter ajudado.
      Grande abraço!

  3. Marcerlo Responder

    Quem diria que em 2019 eu precisaria de uma rotina pra validar o DV da chave de acesso em VB6 e a encontraria no primeiro link retornado do google mesmo sem pesquisar por VB6 tendo certeza que acharia apenas em outra linguagem…
    Valeu!

    • Fabi Silva Responder

      Esse comentário seu nos alegrou aqui em nossa tarde!! Achamos ele maravilhoso! (Alguém que ama VB6 soltou foguetes) hehe
      Abraço!

      Fabi Silva

  4. Samanta Responder

    Muito obrigada, ajudou demais!!!
    A fórmula caiu como uma luva para minhas necessidades!!!

  5. Rafael Responder

    A Fórmula ainda está correta? O Código numérico pode ter apenas 8 caracteres, mas no exemplo esta mostrando 9, acredito que deva estar faltando o tipo de emissão;

  6. Rafael Responder

    A Fórmula ainda está correta? O Código numérico pode ter apenas 8 caracteres, mas no exemplo esta mostrando 9, acredito que deva estar faltando o tipo de emissão;

    • Fabi Silva Responder

      Oii Rafael!
      Obrigada por tua resposta, pois foi através dela que vimos que estava faltando ali o tipo de emissão mesmo. Já atualizamos o post.
      Agora está certinho!
      Valeuu!

      Fabi Silva

  7. Diogo Leitoles Bandeira Responder

    Olá;
    Muito obrigado pela explicação. Foi mto bacana!
    Como meu ERP é em Php, teria como adaptar esse cálculo de uma forma bacana?

    Grande abraço!

    • Fábio Lucas Autor do postResponder

      Opa Diego beleza?

      Bom, hoje não temos algo pronto que possamos te passar pois nossa API já faz isso,
      mas pode ser feito uma função para calcular o cDV onde vai ser passado a chave com 43 numeros
      (no caso sem o cDV) e pode ser feito uma soma ponderada para passar esses valores.
      Nossa API faz esse calculo automáticamente, criando a chave e já calculando o cDV e com isso
      já entregando a chave completa e autorizada do documento fiscal.

      Espero que tenha ajudado! Não deixa de entrar em contato para entender mais nossa API, Tu vai adorar!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *