Simplificar verificação dentro de uma função

Delphi

16/10/2016

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 ....
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

Leandro

Curtidas 0

Melhor post

Araujo Junior.

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
POSTAR