|
Usuários |
|
18 Usuários Online
|
|
[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)
4 Comentários Enviar para um amigo Versão para impressão
|
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 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.
|
[ Comentários não permitidos para usuários anônimos. Por gentileza, registre-se ou conecte-se ao sistema
por: tiagoshimizu (tiagoshimizu@hotmail.com) : Jan 25, 2012 - 12:36 (Informações sobre o membro | Enviar uma mensagem) http://http:// | Diego, só repassando para o pessoal do forum a solução que encontrou. No caso da utilização do delphi 2010, foi observado que deve-se utilizar o seguinte peso:
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);
Aí sim funciona corretamente a função.
Obrigado pela ajuda.
| [ Comentários não permitidos para usuários anônimos. Por gentileza, registre-se ou conecte-se ao sistema
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|