Validação de chave da nfe

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Validação de chave da nfe

Mensagem por rubens »

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

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Validação de chave da nfe

Mensagem por Daniel »

Aqui esta

Código: Selecionar todos

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.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Validação de chave da nfe

Mensagem por rochinha »

Amiguinhos,

rubens
Tire suas conclusões.

Código: Selecionar todos

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))
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Validação de chave da nfe

Mensagem por rubens »

Obrigado Daniel...
Era o que eu precisava... na hora de digitar a chave em notas referenciadas, dava sempre um BO porque o cliente jurava de pé junto que tinha digitado exatamente a chave que estava no danfe. Perdi muito tempo indo até o cliente e digitando a chave para ele... Agora se ele não digitar a chave correta nem termina a digitação da nota... Hora que der um tempinho vou criar uma opção de pegar a chave direto do arquivo de compras já vai encurtar muito o tempo do cliente..

Rochinha... valeu também.. hoje eu uso o Acbr para gerar a chave... agora com a sua função vou gera direto no sistema e economizar alguns segundos quando o ACBR empacar... Obrigado tb...

Rochinha e aproveitando, tem como postar essa função Veryini? Em algum no Fórum acho que você já postou ela... mas vamos encurtar o caminho aqui...
Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Validação de chave da nfe

Mensagem por rochinha »

Amiguinhos,

rubens
Eu gero o meu XML todo na "cutícula", kkkk.

Função VerifyINI() - lembrando que ela usa uma classe do Fivewin.

Código: Selecionar todos

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_ )
Caso precise de algo que não seja Fivewin, veja em Ler INI dinamico
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Validação de chave da nfe

Mensagem por JoséQuintas »

Só aproveitando, pra pegar cada caractere de trás pra frente....

Código: Selecionar todos

  for i := Len(cStr) to 1 step -1
       ... Val(SubStr(cStr,i,1))
next

Código: Selecionar todos

FOR EACH cDigito IN cStr DESCEND
   ... Val( cDigito )
NEXT
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder