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: 1170
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 49 vezes
Mens.Curtidas: 67 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: 347
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 28 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 : ? )

O cara pode até ser feio, mas se ele for honesto, cheiroso, trabalhador,... vai continuar feio, porque, ..., uma coisa não tem nada a ver com a outra.


Sou Corinthiano, mas também torço para São Paulo, Palmeiras, Santos em campeonatos internacionais, portanto, Corinthians no coração e Harbour na cabeça.

[color=#FFFFFF]
"...Feliz aquele que transfere o que sabe e aprende o que ensina. Cora Coralina..."
[color=#FFFFFF]"...Acharam que eu estava derrotado, quem achou estava errado, eu voltei, tô aqui, tô firmão, tô na correria, sô guerreiro, sô vaso ruim de quebrar, tô de volta pro mundão..."
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 3977
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 383 vezes
Mens.Curtidas: 154 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: 1170
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 49 vezes
Mens.Curtidas: 67 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 : ? )

O cara pode até ser feio, mas se ele for honesto, cheiroso, trabalhador,... vai continuar feio, porque, ..., uma coisa não tem nada a ver com a outra.


Sou Corinthiano, mas também torço para São Paulo, Palmeiras, Santos em campeonatos internacionais, portanto, Corinthians no coração e Harbour na cabeça.

[color=#FFFFFF]
"...Feliz aquele que transfere o que sabe e aprende o que ensina. Cora Coralina..."
[color=#FFFFFF]"...Acharam que eu estava derrotado, quem achou estava errado, eu voltei, tô aqui, tô firmão, tô na correria, sô guerreiro, sô vaso ruim de quebrar, tô de volta pro mundão..."
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 3977
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 383 vezes
Mens.Curtidas: 154 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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9092
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 526 vezes




Retornar para Legislação Fiscal e Tributária

Quem está online

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


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro