GARANTIR DESCONTO

Fórum Simplificar verificação dentro de uma função #564136

16/10/2016

0

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

Responder

Post mais votado

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.

Araujo Junior.

Araujo Junior.
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar