Validação de chave da nfe
Moderador: Moderadores
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Validação de chave da nfe
Boa tarde
Alguém tem uma rotina de validação da chave da nfe?
Obrigado
Rubens
Alguém tem uma rotina de validação da chave da nfe?
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Validação de chave da nfe
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
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Validação de chave da nfe
Amiguinhos,
rubens
Tire suas conclusões.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Validação de chave da nfe
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
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ê
"
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Validação de chave da nfe
Amiguinhos,
rubens
Eu gero o meu XML todo na "cutícula", kkkk.
Função VerifyINI() - lembrando que ela usa uma classe do Fivewin.
Caso precise de algo que não seja Fivewin, veja em Ler INI dinamico
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_ )
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Validação de chave da nfe
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/
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/
