Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 07 de Junho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
18 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Dicas]  Função para Validar a Chave da Nota Fiscal Eletrônica
Publicado por rboaro : Segunda, Janeiro 23, 2012 - 06:08 GMT-3 (1367 leituras)
Comentários 4 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Diego Garcia function ValidarChaveNFe(const ChaveNFe: string):boolean;
const
PESO : Array[0..43] of Integer = (4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2,0); /// Aqui corrigido para o Delphi XE
var
Retorno : boolean;
aChave : Array[0..43] of Char;
Soma : Integer;
Verif : Integer;
I : Integer;
begin
Retorno := false;
try
try
if not Length(ChaveNFe) = 44 then
raise Exception.Create('');

StrPCopy(aChave,StringReplace(ChaveNFe,' ', '',[rfReplaceAll]));
Soma := 0;
for I := Low(aChave) to High(aChave) do
Soma := Soma + (StrToInt(aChave[i]) * PESO[i]);

if Soma = 0 then
raise Exception.Create('');

Soma := Soma - (11 * (Trunc(Soma / 11)));
if (Soma = 0) or (Soma = 1) then
Verif := 0
else
Verif := 11 - Soma;

Retorno := Verif = StrToInt(aChave[43]);
except
Retorno := false;
end;
finally
Result := Retorno;
end;
end;



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: tiagoshimizu (tiagoshimizu@hotmail.com) : Jan 23, 2012 - 09:41
(Informações sobre o membro | Enviar uma mensagem) http://http://
Pessoal, testei o código da seguinte maneira:

procedure TForm1.Button1Click(Sender: TObject);
begin
if ValidarChaveNFe(Edit1.Text) then
ShowMessage('Chave aceita')
else
ShowMessage('Chave incorreta');
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.Caption := IntToStr(Length(Edit1.Text));
end;

Quando mandei validar, testei com 4 chaves válidas e somente uma cusou como válida! Coloquei até o label1 para ver se estava digitando o tamanho correto da chave. Também tiveram este mesmo problema? Ou sou eu que estou utilizando o código de maneira errada? Mesmo assim, obrigado ao autor.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados