Clipper On Line • Ver Tópico - Validação de chave da nfe

Validação de chave da nfe

Discussão sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (ECF, TEF, SINTEGRA, NF-e, ECD, EFD, etc.)

Moderador: Moderadores

 

Validação de chave da nfe

Mensagempor rubens » 16 Abr 2018 15:34

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 de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Validação de chave da nfe

Mensagempor Daniel » 16 Abr 2018 16:33

Aqui esta

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 de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Validação de chave da nfe

Mensagempor rochinha » 16 Abr 2018 17:37

Amiguinhos,

rubens
Tire suas conclusões.

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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Validação de chave da nfe

Mensagempor rubens » 16 Abr 2018 17:45

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 de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Validação de chave da nfe

Mensagempor rochinha » 16 Abr 2018 18:50

Amiguinhos,

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

Função VerifyINI() - lembrando que ela usa uma classe do Fivewin.
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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Validação de chave da nfe

Mensagempor JoséQuintas » 16 Abr 2018 23:22

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

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


FOR EACH cDigito IN cStr DESCEND
   ... Val( cDigito )
NEXT
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Legislação Fiscal e Tributária

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro