Post Original :
Estou precisando Validar a Chave de Acesso DIGITADA pelo usuario.
No exemplo Delphi NFe não encontrei, eu já valido se esta vazio, se é somente numero, se tem 44 posições , mas preciso validar se esta correta.
Sei que o digito verificador é baseado no Modulo 11, posso ate fazer uma função, mas se já tiver no ACBr não vejo porque perder tempo.
Obrigado
O REGYS SILVEIRA RESPONDEU :
Utilize o método ValidarChave que está na unit pcnAuxiliar.
Por favor, não aproveite tópicos, abra um novo
Mas antes de obter a resposta já havia resolvido da seguinte forma :
Encontrei em https://drgarcia1986.wordpress.com/2012/01/31/funcao-para-validar-a-chave-da-nfe/ uma função que estou usando e funcionou, coloco aqui
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); 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) * PESO); 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;