Boa tarde
Alguém tem uma rotina de validação da chave da nfe?
Obrigado
Rubens

Moderador: Moderadores
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito, nSoma:= 0
For contador:= 1 To 43
nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
Next
digito:= (nSoma % 11)
If digito == 0 .Or. digito == 1
digito:= 0
Else
digito:= (11 - digito)
EndIf
If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
Alert('Código da Chave Errado....')
Return .f.
EndIf
Return .t.
Function ChaveDeAcesso( cCodUF, dEmissao, cCNPJ, nModelo, nSerie, nNumeroNF, nCodigoNumerico )
// Exemplo da geração: 35 10 03 05103502000152 55 001 000006720 000006720 9
emissao := DtoS( dEmissao )
cNFeVersao := VerifyINI( "NFELETRONICA", "Versao" , "2.00", cPathMonitorNFe+"\ACBrNFeMonitor.ini", .f.) // Versao
cNFEtpEmis := VerifyINI( "NFELETRONICA", "tpEmis" , "1" , cPathMonitorNFe+"\ACBrNFeMonitor.ini", .f.) // 1-Normal, 2-Contingencia, 3-SCAN, 4-DPEC, 5-FS-DA
aNFESerie := { "001", "900", "910", "920", "930" }
cNFEserie := aNFESerie[ val(cNFEtpEmis) ]
//if nNFEtpAmb = 2
// cCNPJ := "99.999.999/0001-91"
//endif
chave := ""
chave := chave + cCodUF // 35
chave := chave + Substr(Emissao,3,2) // 2010 dois ultimos digitos do ano
chave := chave + Substr(Emissao,5,2) // 03 mes
chave := chave + LimpaCGC(cCNPJ) // 05103502000152
chave := chave + StrZero(nModelo,2,0) // 55
chave := chave + cNFEserie // 001
chave := chave + StrZero(nNumeroNF,9,0) // 000006720
//
chave := chave + cNFEtpEmis + StrZero(nCodigoNumerico,8,0)
return chave + DVModulo11(chave,2,9)
Function DVModulo11(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))
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
oIni := TIni():New( _inifile_ )
if _grava_ = .t.
oIni:Set( _section_, _entry_, iif( ValType( _var_ )="C", alltrim( _var_ ), _var_ ) )
endif
return oIni:Get( _section_, _entry_, _var_, _var_ )
for i := Len(cStr) to 1 step -1
... Val(SubStr(cStr,i,1))
next
FOR EACH cDigito IN cStr DESCEND
... Val( cDigito )
NEXT
Retornar para Legislação Fiscal e Tributária
Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes