Como não houve resposta, vou postar aqui um código que faz isso e pode ser útil para outros.
Eu tenho isso dividido em algumas classes, então pra copiar precisa adaptar, claro.
Caso queiram, podem incorporar ao Acbr.
type
TCampoChaveNfe = (ccnUf, ccnAno, ccnMes, ccnCnpj, ccnModelo, ccnSerie,
ccnNumero, ccnFormaEmissao, ccnCodigoNumerico, ccnDigitoVerificador);
class function TStrUtils.FiltrarNumero(Value: string): string;
var
i: integer;
begin
Result := '';
for i := 1 to Length(Value) do
if Value[i] in ['0'..'9'] then
Result := Result + Value[i];
end;
class function TNfe.GetConteudoCampoChaveNfe(Campo: TCampoChaveNfe;
Chave: string): string;
var
sChave: string;
begin
sChave := TStrUtils.FiltrarNumero(Chave);
if Length(sChave) <> 44 then
raise Exception.Create('Chave de acesso inválida, não possui 44 números.');
case Campo of
ccnUf: Result := Copy(sChave, 1 , 2);
ccnAno: Result := Copy(sChave, 3, 2);
ccnMes: Result := Copy(sChave, 5, 2);
ccnCnpj: Result := Copy(sChave, 7, 14);
ccnModelo: Result := Copy(sChave, 21, 2);
ccnSerie: Result := Copy(sChave, 23, 3);
ccnNumero: Result := Copy(sChave, 26, 9);
ccnFormaEmissao: Result := Copy(sChave, 35, 1);
ccnCodigoNumerico: Result := Copy(sChave, 36, 8);
else
Result := Copy(sChave, 44, 1);
end;
end;
abs
André
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.