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; } } } }