Oi Ricardo
cNf ---- não sei o conteudo deste campo.
Quanto ao cNF
Código Numérico que compõe a Chave de Acesso .
Eu optei por usar o mesmo número da nota, devido a alguns problemas que tive no início quando o meu sistema dava algum erro e não gravava no banco de dados a chave e eu precisava consultar novamente a mesma chave para saber se a nota estava na SEFAZ. Antes eu cheguei a usar um número aleatório.
Quanto ao Dígito Verificador
No Manual Integração - Contribuinte Versão 4.0.1 - Página 85 explica sobre o cálculo do dígito.
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:
A = CHAVE DE ACESSO
B = PESOS
C = PONDERAÇÃO (A*B)
A) 5 2 0 6 0 4 3 3 0 0 9 9 1 1 0 0 2 5 0 6 5 5 0 1 2 0 0 0 0 0 0 7 8 0 0 2 6 7 3 0 1 6 1
B) 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2
C) 20 6 0 54 0 28 18 15 0 0 18 81 8 7 0 0 8 15 0 54 40 35 0 5 8 0 0 0 0 0 0 35 32 0 0 18 48 49 18 0 4 18 2
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.
Abaixo a função que eu utilizo para calcular o dígito: (Acho que foi disponibilizada por algum colega deste forum)
Código: Selecionar todos
Function Modulo11(cStr,nPeso1,nPeso2)
local nTot := 0
local nMul := nPeso1
local i
for i := Len(cStr) to 1 step -1
nTot += Val(SubStr(cStr,i,1)) * nMul
nMul := if(nMul=nPeso2, nPeso1, nMul+1)
next
return if(nTot%11 < 2, "0", Str(11-(nTot%11),1))
Exemplo de uso:
Modulo11("5206043300991100250655012000000780026730161",2,9)
nPeso1 é o numero inicial da sequencia de multiplicadores e nPeso2 é o número final (o máximo) ai a função reinicia o valor nomamente de 2 até 9.
Um abraço!
Té+