// Monta os numeros da Chave de Acesso da NFe 2.00
function MontaChaveAcessoNFe_v200( codUF: integer; dtEmissao: TDateTime; CNPJ, tpEmis: string; Modelo, Serie, NumeroNF: integer): string;
var
emissao : string[10];
chave : string;
begin
emissao := formatdatetime('DD/MM/YY', dtEmissao);
chave := IntToStr(codUF) +
copy( emissao, 7, 2) +
copy(emissao, 4, 2) +
FiltraNumeros(CNPJ) +
StrZero(Modelo, 2) +
StrZero(Serie, 3) +
StrZero(NumeroNF, 9) +
tpEmis +
StrZero(NumeroNF, 8);
Result := chave + Modulo11(chave);
end;
OBS: tpEmis = producao ou homologação
// função do Modulo 11
function Modulo11(Numero: String): String;
var
i,j,k : Integer;
Soma : Integer;
Digito : Integer;
CNPJ : Boolean;
begin
Result := '';
Try
Soma := 0; k:= 2;
for i := Length(Numero) downto 1 do
begin
Soma := Soma + (StrToInt(Numero)*k);
inc(k);
if k > 9 then k := 2;
end;
Digito := 11 - Soma mod 11;
if Digito >= 10 then Digito := 0;
Result := Result + Chr(Digito + Ord('0'));
except
Result := 'X';
end;
end;
// função StrZero
function StrZero(Valor: Integer; TamanhoRet: Integer): String;
var
VarStr : String;
TamanhoStr: Integer;
begin
VarStr := Trim(IntToStr(Valor));
TamanhoStr := Length(VarStr);
if TamanhoStr >= 0 then
begin
for TamanhoRet := 1 to TamanhoRet - TamanhoStr do
VarStr := '0' + VarStr;
end;
StrZero := VarStr;
end;
// função Filtra Numeros
function FiltraNumeros(Texto: String): String;
var
i: Integer;
Validos: String;
begin
Result := '';
Validos := '0123456789';
for I := 1 to Length(Texto) do
if Pos(Texto, Validos) > 0 then
begin
Result := Result + Texto;
end;
end;