All pastes #1462923 Raw Edit

CPF do Gui

public text v1 · immutable
#1462923 ·published 2009-06-17 03:09 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace TRABALHANDO_COM_CLASSES
{
    class ValidaCPF
    {
        private string CPFTrabalhado;
        private string CPF;
        private int Resto;
        private int Soma;
        private bool Existe = false;

        public ValidaCPF(string cpf)
        {
            //Tira os espaços, e elimina o "-" e o "." que vem no Mask
            cpf = cpf.Replace(".", "").Replace("-", "");
            cpf = cpf.Trim();
            bool result = false;
            
                // verifica a estrutura do cpf xxx.xxx.xxx-xx e se tem 11 digitos
                result = Regex.IsMatch(cpf, @"(^(\d{3}.\d{3}.\d{3}-\d{2})|(\d{11})$)");
                if (result)
                    /* verifica se não existe repeticao,
                     * exemplo, 222.222.222-22 válido no algoritmo, porém inválido */
                    result = !Regex.IsMatch(cpf, @"^[0]{11}|[1]{11}|[2]{11}|[3]{11}|[4]{11}|[5]{11}|[6]{11}|[7]{11}|[8]{11}|[9]{11}$");

                if (result == true)
                {
                    this.CPFTrabalhado = cpf.Substring(0, 9);
                    this.CPF = cpf;

                    this.Calculo(9, 10);
                    this.Calculo(10, 11);
                }
                else
                    this.CPF = "INVÁLIDO";
        }

        private void Calculo(int Tamanho, int j)
        {
            //Tamanho 9 pra o 1º digito
            //Tamanho 10 para o 2º digito
            int[] ArrayCPF = new int[Tamanho];

            for (int i = 0; i != ArrayCPF.Length; i++)
            {
                ArrayCPF[i] = int.Parse(this.CPFTrabalhado.Substring(i, 1));
                //Multiplicação do numeros do CPF para 1º digíto:
                //1º x 10, 2º x 9, 3º x 8 .....
                //para 2º digíto:
                //1º x 11, 2º x 10, 3º x 9 .....
                ArrayCPF[i] *= j;
                j--;
                //Soma o resultado de todas as multiplicações dos números.
                Soma += ArrayCPF[i];
            }
            //Pega o resto da divisão do total das multiplicações por 11
            Resto = Soma % 11;
            this.FormacaoDigitoVerificador(Resto);
            this.Resto = 0;
            this.Soma = 0;
        }

        private void FormacaoDigitoVerificador(int Resto)
        {
            //Cria um digíto verificador de 2 números para mais tarde no
            //método TrueOrFalse() comparar com os digítos originais do CPF.
            int Digito = 11 - Resto;
            if (Resto > 2)
                this.CPFTrabalhado += Digito.ToString();
            else
                this.CPFTrabalhado += "0";
            if(CPFTrabalhado.Length == 11)
            this.TrueOrFalse();
        }

        private void TrueOrFalse()
        {
            //Compara o digito verificador criado, com o original
            if (this.CPF == this.CPFTrabalhado)
                Existe = true;
        }

        public bool isValid
        {     
            //crio a propriedade isValid
            get
            {
                return Existe;
            }
        }
    }

}