Validação CNPF

08/09/2008

Criei uma rotina para poder validar o CNPJ, mais nao e um campo obrigatorio. O meu grande problema foi quando deparei com o seguinte problema se o usuario digitar 2 caracter iria permitir salvar e me gerari um transtorno acabei fazendo o procedimento abaixo. Alguem poderia me ajudar a melhorar este codigo ate para poder ser postado. Pois no futuro pode ser a duvida de alguém:

[b&93;&91;i&93;procedure Ttransp.DBEdit3Exit(Sender: TObject);
  Var
    n: array&91;1..14&93;of integer;
    dgt1, dgt2: integer;
    soma1, soma2:integer;
  begin
    inherited;
    If (copy(dbEdit3.Text,1,1)<>´ ´) and (copy(dbEdit3.Text,2,1)<>´ ´) and (copy(dbEdit3.Text,4,1)<>´ ´) and (copy(dbEdit3.Text,5,1)<>´ ´) and (copy(dbEdit3.Text,6,1)<>´ ´) and (copy(dbEdit3.Text,8,1)<>´ ´) and (copy(dbEdit3.Text,9,1)<>´ ´) and (copy(dbEdit3.Text,10,1)<>´ ´) and (copy(dbEdit3.Text,12,1)<>´ ´) and (copy(dbEdit3.Text,13,1)<>´ ´) and (copy(dbEdit3.Text,14,1)<>´ ´) and (copy(dbEdit3.Text,15,1)<>´ ´) and (copy(dbEdit3.Text,17,1)<>´ ´) and (copy(dbEdit3.Text,18,1)<>´ ´) Then
      Begin
        { // PREPARANDO OS NUMEROS PARA O CALCULO \\}
        n[1&93;:= strToInt(copy(dbEdit3.Text,1,1));
        n&91;2&93;:= strToInt(copy(dbEdit3.Text,2,1));
        n&91;3&93;:= strToInt(copy(dbEdit3.Text,4,1));
        n&91;4&93;:= strToInt(copy(dbEdit3.Text,5,1));
        n&91;5&93;:= strToInt(copy(dbEdit3.Text,6,1));
        n&91;6&93;:= strToInt(copy(dbEdit3.Text,8,1));
        n&91;7&93;:= strToInt(copy(dbEdit3.Text,9,1));
        n&91;8&93;:= strToInt(copy(dbEdit3.Text,10,1));
        n&91;9&93;:= strToInt(copy(dbEdit3.Text,12,1));
        n&91;10&93;:= strToInt(copy(dbEdit3.Text,13,1));
        n&91;11&93;:= strToInt(copy(dbEdit3.Text,14,1));
        n&91;12&93;:= strToInt(copy(dbEdit3.Text,15,1));
        n&91;13&93;:= strToInt(copy(dbEdit3.Text,17,1));
        n&91;14&93;:= strToInt(copy(dbEdit3.Text,18,1));

        { // CALCULO DO PRIMEIRO DÍGITO VERIFICADOR \\ }
        Soma1:= (n[1&93;*5) + (n&91;2&93;*4) + (n&91;3&93;*3) + (n&91;4&93;*2) + (n&91;5&93;*9) + (n&91;6&93;*8) + (n&91;7&93;*7) + (n&91;8&93;*6) + (n&91;9&93;*5) + (n&91;10&93;*4) + (n&91;11&93;*3) + (n&91;12&93;*2);
        dgt1:= 11 - (Soma1 mod 11);
        If (dgt1 = 10) or (dgt1 = 11) Then dgt1:= 0;

        { // CALCULO DO SEGUNDO DÍGITO VERIFICADOR \\ }
        Soma2:= (n&91;1&93;*6) + (n&91;2&93;*5) + (n&91;3&93;*4) + (n&91;4&93;*3) + (n&91;5&93;*2) + (n&91;6&93;*9) + (n&91;7&93;*8) + (n&91;8&93;*7) + (n&91;9&93;*6) + (n&91;10&93;*5) + (n&91;11&93;*4) + (n&91;12&93;*3) + (dgt1 * 2);
        dgt2:= 11 - (Soma2 mod 11);
        If (dgt2 = 10) or (dgt2 = 11) Then dgt2:= 0;

        { // CONFERINDO OS DIGITOS VERIFICADORES \\ }
        If (dgt1 <> n&91;13&93;) or (dgt2 <> n&91;14&93;) Then
          begin
            mensagem:= ´Numero do CNPJ Inválido. ´;
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            abort;
          end;
      End
    Else
      Begin
        { // VERIFICANDO SE FORAM DIGITADOS OS 14 DÍGITOS \\ }
        mensagem:= ´CNPJ incompleto.´ + #13 +´Digite novamente´+ 13 + ´os 14 dígitos. ´;
        if not (copy(dbEdit3.Text,1,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,2,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,4,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,5,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,6,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,8,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,9,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,10,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,12,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,13,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,14,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,15,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,17,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end
        Else If not (copy(dbEdit3.Text,18,1)=´ ´) then
          begin
            Application.MessageBox(Pchar(mensagem), ´Erro no CNPJ...´, MB_OK + MB_IconError);
            dbEdit3.SetFocus;
            dbEdit3.Clear;
            Abort;
          end;
      End;
  end;
[/i][/b]


Serpentedodeserto