Simplificar verificação dentro de uma função
Gostaria de enxutar meu codigo e colocar dentro de uma função, de que maneira eu poderia simplificar o mesmo colocando dentro de uma função ?
Poderiam me dizer se o algoritmo de verificação esta correto ? estou meio em duvida ....
Poderiam me dizer se o algoritmo de verificação esta correto ? estou meio em duvida ....
if Length(edtCnpjOrCpfCliente.Text) > 0 then
begin
if (Length(edtCnpjOrCpfCliente.Text) = 14) then
begin
lblCnpjVerifica.Visible := false;
operacao := StrToInt(edtCnpjOrCpfCliente.Text[1]) * 5 + StrToInt(edtCnpjOrCpfCliente.Text[2]) * 4 +
StrToInt(edtCnpjOrCpfCliente.Text[3]) * 3 + StrToInt(edtCnpjOrCpfCliente.Text[4]) * 2 +
StrToInt(edtCnpjOrCpfCliente.Text[5]) * 9 + StrToInt(edtCnpjOrCpfCliente.Text[6]) * 8 +
StrToInt(edtCnpjOrCpfCliente.Text[7]) * 7 + StrToInt(edtCnpjOrCpfCliente.Text[8]) * 6 +
StrToInt(edtCnpjOrCpfCliente.Text[9]) * 5 + StrToInt(edtCnpjOrCpfCliente.Text[10]) * 4 +
StrToInt(edtCnpjOrCpfCliente.Text[11]) * 3 + StrToInt(edtCnpjOrCpfCliente.Text[12]) * 2;
digito1 := (operacao mod 11);
if digito1 < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - (operacao mod 11);
end;
operacao := StrToInt(edtCnpjOrCpfCliente.Text[1]) * 6 + StrToInt(edtCnpjOrCpfCliente.Text[2]) * 5 +
StrToInt(edtCnpjOrCpfCliente.Text[3]) * 4 + StrToInt(edtCnpjOrCpfCliente.Text[4]) * 3 +
StrToInt(edtCnpjOrCpfCliente.Text[5]) * 2 + StrToInt(edtCnpjOrCpfCliente.Text[6]) * 9 +
StrToInt(edtCnpjOrCpfCliente.Text[7]) * 8 + StrToInt(edtCnpjOrCpfCliente.Text[8]) * 7 +
StrToInt(edtCnpjOrCpfCliente.Text[9]) * 6 + StrToInt(edtCnpjOrCpfCliente.Text[10]) * 5 +
StrToInt(edtCnpjOrCpfCliente.Text[11]) * 4 + StrToInt(edtCnpjOrCpfCliente.Text[12]) * 3 +
digito1 * 2;
digito2 := (operacao mod 11);
if digito2 < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - (operacao mod 11);
end;
verificaCnpj(StrToInt(edtCnpjOrCpfCliente.Text[13]),digito1,StrToInt(edtCnpjOrCpfCliente.Text[14]),digito2);
end
else
begin
if Length(edtCnpjOrCpfCliente.Text) = 11 then
begin
operacao := StrToInt(edtCnpjOrCpfCliente.Text[1]) * 10 + StrToInt(edtCnpjOrCpfCliente.Text[2]) * 9 +
StrToInt(edtCnpjOrCpfCliente.Text[3]) * 8 +StrToInt(edtCnpjOrCpfCliente.Text[4]) * 7 +
StrToInt(edtCnpjOrCpfCliente.Text[5]) * 6 +StrToInt(edtCnpjOrCpfCliente.Text[6]) * 5 +
StrToInt(edtCnpjOrCpfCliente.Text[7]) * 4 +StrToInt(edtCnpjOrCpfCliente.Text[8]) * 3 +
StrToInt(edtCnpjOrCpfCliente.Text[9]) * 2;
digito1 := (operacao mod 11);
if digito1 < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - (operacao mod 11);
end;
operacao := StrToInt(edtCnpjOrCpfCliente.Text[1]) * 11 + StrToInt(edtCnpjOrCpfCliente.Text[2]) * 10 +
StrToInt(edtCnpjOrCpfCliente.Text[3]) * 9 +StrToInt(edtCnpjOrCpfCliente.Text[4]) * 8 +
StrToInt(edtCnpjOrCpfCliente.Text[5]) * 7 +StrToInt(edtCnpjOrCpfCliente.Text[6]) * 6 +
StrToInt(edtCnpjOrCpfCliente.Text[7]) * 5 +StrToInt(edtCnpjOrCpfCliente.Text[8]) * 4 +
StrToInt(edtCnpjOrCpfCliente.Text[9]) * 3 + digito1 * 2;
digito2 := (operacao mod 11);
if digito2 < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - (operacao mod 11);
end;
verificaCpf(digito1,StrToInt(edtCnpjOrCpfCliente.Text[10]),digito2,StrToInt(edtCnpjOrCpfCliente.Text[11]));
end
else
begin
lblCnpjVerifica.Visible := true;
lblCnpjVerifica.Caption := 'Dado invalido.';
end;
end;
end;
end;Leandro
Curtidas 0
Melhor post
Araujo Junior.
03/11/2016
Não sei se voce é do tipo de programador que utiliza componentes de terceiros, mas no ACBR, existe um componente chamado ACBrValidador que realiza validações de Cnpj, Cpf, Cartao de Credito, Insc. Estadual, CNH, GTIN, Email entre outros documentos.
GOSTEI 1