Cálculo dígito verificador NF-e

16,200 views
Skip to first unread message

Geraldo Nunes

unread,
Nov 22, 2011, 8:45:31 AM11/22/11
to GRUPO SPED
Olá Pessoal,
 
Há alguns dias falamos de como montar a chave de acesso da Nfe com base em alguns dados como o no nrº da nota, série, data de emissão, CNPJ do fornecedor, etc.
 
Porém, agora eu é quem fiquei com a seguinte dúvida:
 
No final da chave há o dígito verificador e depois se mostra como calcular, porém não entendi nada.
 
Alguém poderia me explicar baseado como se faz esse cálculo do DV baseado nos dados abaixo?
NF: 000003834
SERIE: 1
CNPJ: 01.844.555/0002-63
UF: MG
DT EMISSAO: 25/10/2011
 
 
***OBS: Extraí o texto abaixo do manual, alguém traduza isso para o português claro por favor
Atenciosamente,
Geraldo Nunes
 
CÁLCULO DO DÍGITO VERIFICADOR DA CHAVE DE ACESSO DA NF-e
O dígito verificador da chave de acesso da NF-e é baseado em um cálculo do
módulo 11. O módulo 11 de um número é calculado multiplicando-se cada algarismo pela
seqüência de multiplicadores 2,3,4,5,6,7,8,9,2,3, ... posicionados da direita para a esquerda.
A somatória dos resultados das ponderações dos algarismos é dividida por 11 e o
DV (dígito verificador) será a diferença entre o divisor (11) e o resto da divisão:
DV = 11 - (resto da divisão)
Quando o resto da divisão for 0 (zero) ou 1 (um), o DV deverá ser igual a 0 (zero).
Exemplo: consideremos que a chave de acesso tem a seguinte seqüência de caracteres:
Somatória das ponderações = 644
Dividindo a somatória das ponderações por 11 teremos, 644 /11 = 58 restando 6.
Como o dígito verificador DV = 11 - (resto da divisão), portando 11 - 6 = 5
Neste caso o DV da chave de acesso da NF-e é igual a "
5", valor este que deverá compor a
chave de acesso totalizando a uma seqüência de 44 caracteres.

Paulo Geloramo

unread,
Nov 22, 2011, 8:55:17 AM11/22/11
to sped...@googlegroups.com
Segue abaixo a função Modulo11 para Delphi:

function Modulo11(Valor: string; Base: Integer = 9; Resto: Boolean = False): string;
{
  Rotina muito usada para calcular dígitos verificadores
  Pega-se cada um dos dígitos contidos no parâmetro VALOR, da direita para a
  esquerda e multiplica-se pela seqüência de pesos 2, 3, 4 ... até BASE.
  Por exemplo: se a base for 9, os pesos serão 2,3,4,5,6,7,8,9,2,3,4,5...
  Se a base for 7, os pesos serão 2,3,4,5,6,7,2,3,4...
  Soma-se cada um dos subprodutos.
  Divide-se a soma por 11.
  Faz-se a operação 11-Resto da divisão e devolve-se o resultado dessa operação
  como resultado da função Modulo11.
  Obs.: Caso o resultado seja maior que 9, deverá ser substituído por 0 (ZERO).
}
var
  Soma, Contador, Peso, Digito: Integer;
begin
  Soma := 0;
  Peso := 2;
  for Contador := Length(Valor) downto 1 do
  begin
    Soma := Soma + (StrToInt(Valor[Contador]) * Peso);
    if Peso < Base then
      Peso := Peso + 1 else
      Peso := 2;
  end;

  if Resto then
    Result := IntToStr(Soma mod 11)
  else
  begin
    Digito := 11 - (Soma mod 11);
    if (Digito > 9) then
      Digito := 0;
    Result := IntToStr(Digito);
  end;
end;
--
Paulo Geloramo
www.assisinformatica.com

Geraldo Nunes

unread,
Nov 22, 2011, 9:29:14 AM11/22/11
to sped...@googlegroups.com
Paulo,
 
Obrigado pela ajuda, mas vc teria algo em excel ou até mesmo VB aplicável ao excel (macro)?
grato
 
Atenciosamente,
Geraldo Nunes

--
--------------
Este Grupo se destina a discutir a implantação do SPED - Sistema Público de Escrituração Digital. Você recebeu esta mensagem por ter se inscrito no grupo do Google Groups "SPED - Sistema Público de Escrituração Digital".
 
Para postar uma mensagem no grupo, envir um email para sped...@googlegroups.com
 
Para sair do grupo, envie uma mensagem para
sped-nfe+u...@googlegroups.com


Paulo Geloramo

unread,
Nov 22, 2011, 9:35:57 AM11/22/11
to sped...@googlegroups.com
Não tenho, vai encontrar várias pesquisando o google.

Marco Aurélio V. da Silva

unread,
Nov 23, 2011, 6:45:24 AM11/23/11
to sped...@googlegroups.com
Caro Geraldo,
 
Exemplificando:
 
Numero Base para exemplo = 121212
 
o calculo seria o seguinte, vc multiplica os digitos da base por 23456789 e se precisar comeca do 23456789 de novo da direita para esquerda
    1   2   1   2   1   2
*  7   6   5   4   3   2
--------------------------
    7  12  5   8   3   4
 
e soma os resultados: 7+12+5+8+3+4 = 39
 
agora pega o resto da divisao do resultado por 11
mod 39 por 11 = 6
 
agora pega 11 – resto
11 – 6 = 5
 
agora se o resultado for >= 10 o digito vai ser 0, se não vai ser o resultado.
 
Se for um numero grande só exemplificando como ficaria o calculo
 
  1   2   1   2   1   2   1   2   1   2   1   2
*5   4   3   2   9   8   7   6   5   4   3   2
------------------------------------------------
 
e o resto igual.
 
Espero que tenha ajudado.
 
T+
 
Marco Aurélio V. da Silva
ma...@prodatanet.com.br
marcop...@gmail.com
msn: ma...@prodatanet.com.br
Prodata Inf. e Cadastros LTDA
(33) 3322-4444

Benhur

unread,
Nov 23, 2011, 8:02:37 AM11/23/11
to SPED - Sistema Público de Escrituração Digital
Geraldo,

Segue exemplo do modulo 11, feito em VB como comentou, imagino que
possa ser usado na macro, pois na macro se usa Visual Basic
Esta função retornara o digito verificador

Public Function Calculo_DV11(ByVal strNumero As String) As String
'Calculo modulo 11
Dim I As Integer : Dim IntCont As Integer : Dim Vlr As Integer
Dim Resto As Integer
IntCont = 2
Vlr = 0
For I = Len(strNumero) To 1 Step -1
Vlr = Vlr + (Val(Mid(strNumero, I, 1) * IntCont))
IntCont = IIf(IntCont >= 9, 2, IntCont + 1)
Next
Resto = Vlr Mod 11
Select Case Resto
Case 0
Resto = 0
Case 1
Resto = 0
Case Is > 1
Resto = Str(Val(11 - Resto))
End Select
Calculo_DV11 = Resto
End Function

On 22 nov, 11:45, Geraldo Nunes <geraldo.nu...@yahoo.com.br> wrote:
> Olá Pessoal,
>
> Há alguns dias falamos de como montar a chave de acesso da Nfe com base em alguns dados como o no nrº da nota, série, data de emissão, CNPJ do fornecedor, etc.
>
> Porém, agora eu é quem fiquei com a seguinte dúvida:
>
> No final da chave há o dígito verificador e depois se mostra como calcular, porém não entendi nada.
>
> Alguém poderia me explicar baseado como se faz esse cálculo do DV baseado nos dados abaixo?
> NF: 000003834
> SERIE: 1
> CNPJ: 01.844.555/0002-63
> UF: MG
> DT EMISSAO: 25/10/2011
>
> ***OBS: Extraí o texto abaixo do manual, alguém traduza isso para o português claro por favor
> Atenciosamente,
> Geraldo Nunes
>

> CÁLCULO DO DÍGITO VERIFICADOR DA CHAVE DE ACESSO DA NF-eO dígito verificador da chave de acesso da NF-e é baseado em um cálculo do


> módulo 11. O módulo 11 de um número é calculado multiplicando-se cada algarismo pela
> seqüência de multiplicadores 2,3,4,5,6,7,8,9,2,3, ... posicionados da direita para a esquerda.
> A somatória dos resultados das ponderações dos algarismos é dividida por 11 e o

> DV (dígito verificador) será a diferença entre o divisor (11) e o resto da divisão:DV = 11 - (resto da divisão)Quando o resto da divisão for 0 (zero) ou 1 (um), o DV deverá ser igual a 0 (zero).


> Exemplo: consideremos que a chave de acesso tem a seguinte seqüência de caracteres:
> Somatória das ponderações = 644
> Dividindo a somatória das ponderações por 11 teremos, 644 /11 = 58 restando 6.
> Como o dígito verificador DV = 11 - (resto da divisão), portando 11 - 6 = 5
> Neste caso o DV da chave de acesso da NF-e é igual a "

> chave de acesso totalizando a uma seqüência de 44 caracteres.5", valor este que deverá compor a

Reply all
Reply to author
Forward
0 new messages