Validar chave de XML
Enviado: 27 Nov 2019 às 09:51
Olá pessoal
Estou fazendo um trabalho onde tenho de digitar a chave do XMLs em uma planilha (cujo o leitor de barra não consegue ler ), como tenho de acumular um grupo de informações, pensei, preciso ir validando antes de consolidar das informações e achei essa receita de bolo para fazer isto, mas não sei criar o VBA e o esquema no excel para gerar a critica de o código esta correto conforme as regra de uma chave de XMls de notas fiscais.
Dígito Verificador da Chave de Acesso – saiba como calcular!
PUBLICADO EM 19/12/2017 POR LEONARDO
Descomplicamos o Cálculo do Dígito Verificador da Chave de Acesso em Documentos Fiscais Eletrônicos.
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.
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 + Código Numérico + Dígito Verificador.
De uma forma mais visual: 43–1712–07.364.617/0001–35–55–000–000.012.014–100.012.014–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 + 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 esquerda) pelos 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:
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
Public Function CalculaDV(chave43 As String)
Dim indice, multiplicador As Integer
Dim soma, resto, digito_verificador As Integer
'Zera a soma
soma = 0
'Multiplicador inicia com 9
multiplicador = 2
'Multiplica do 43° até o 1° caractere da chave
For indice = Len(chave43) To 1 Step -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) Then multiplicador = 2
Next indice
'Pega o resto da divisão através da função mod
resto = soma Mod 11
'Dígito verificador é o resultado da subtração 11 - resto
digito_verificador = 11 - resto
'Testa se o DV é maior = 10
If (digito_verificador >= 10) Then digito_verificador = 0
'Retorna o DV
CalculaDV = Abs(digito_verificador)
End Function
Grato
Marcelo Silva
24 988083360
Estou fazendo um trabalho onde tenho de digitar a chave do XMLs em uma planilha (cujo o leitor de barra não consegue ler ), como tenho de acumular um grupo de informações, pensei, preciso ir validando antes de consolidar das informações e achei essa receita de bolo para fazer isto, mas não sei criar o VBA e o esquema no excel para gerar a critica de o código esta correto conforme as regra de uma chave de XMls de notas fiscais.
Dígito Verificador da Chave de Acesso – saiba como calcular!
PUBLICADO EM 19/12/2017 POR LEONARDO
Descomplicamos o Cálculo do Dígito Verificador da Chave de Acesso em Documentos Fiscais Eletrônicos.
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.
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 + Código Numérico + Dígito Verificador.
De uma forma mais visual: 43–1712–07.364.617/0001–35–55–000–000.012.014–100.012.014–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 + 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 esquerda) pelos 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:
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
Public Function CalculaDV(chave43 As String)
Dim indice, multiplicador As Integer
Dim soma, resto, digito_verificador As Integer
'Zera a soma
soma = 0
'Multiplicador inicia com 9
multiplicador = 2
'Multiplica do 43° até o 1° caractere da chave
For indice = Len(chave43) To 1 Step -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) Then multiplicador = 2
Next indice
'Pega o resto da divisão através da função mod
resto = soma Mod 11
'Dígito verificador é o resultado da subtração 11 - resto
digito_verificador = 11 - resto
'Testa se o DV é maior = 10
If (digito_verificador >= 10) Then digito_verificador = 0
'Retorna o DV
CalculaDV = Abs(digito_verificador)
End Function
Grato
Marcelo Silva
24 988083360