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