Hoje vamos com uma pequena dica, vamos ver como fazer a validação de CPF e CNPJ no C#. Para fazer a validação, eu criei uma pequena classe estática no C#, com o nome CpfCnpjUtils. Ela é composta por 3 métodos, sendo 1 método privado utilizado para verificar se um CPF é válido, outro também privado para verificar se o CNPJ é válido, e por fim um método publico, que é responsável por chamar os 2 outros métodos. Vamos ao código?
namespace CpfCnpj { public static class CpfCnpjUtils { public static bool IsValid(string cpfCnpj) { return (IsCpf(cpfCnpj) || IsCnpj(cpfCnpj)); } private static bool IsCpf(string cpf) { int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 }; int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 }; cpf = cpf.Trim().Replace(".", "").Replace("-", ""); if (cpf.Length != 11) return false; for (int j = 0; j < 10; j++) if (j.ToString().PadLeft(11, char.Parse(j.ToString())) == cpf) return false; string tempCpf = cpf.Substring(0, 9); int soma = 0; for (int i = 0; i < 9; i++) soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i]; int resto = soma % 11; if (resto < 2) resto = 0; else resto = 11 - resto; string digito = resto.ToString(); tempCpf = tempCpf + digito; soma = 0; for (int i = 0; i < 10; i++) soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i]; resto = soma % 11; if (resto < 2) resto = 0; else resto = 11 - resto; digito = digito + resto.ToString(); return cpf.EndsWith(digito); } private static bool IsCnpj(string cnpj) { int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 }; int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 }; cnpj = cnpj.Trim().Replace(".", "").Replace("-", "").Replace("/", ""); if (cnpj.Length != 14) return false; string tempCnpj = cnpj.Substring(0, 12); int soma = 0; for (int i = 0; i < 12; i++) soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i]; int resto = (soma % 11); if (resto < 2) resto = 0; else resto = 11 - resto; string digito = resto.ToString(); tempCnpj = tempCnpj + digito; soma = 0; for (int i = 0; i < 13; i++) soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i]; resto = (soma % 11); if (resto < 2) resto = 0; else resto = 11 - resto; digito = digito + resto.ToString(); return cnpj.EndsWith(digito); } } }
O código acima também está disponível publicamente no meu Gist, para acessá-lo basta clicar aqui.
A idéia é vermos aqui como fazer a validação de CPF e CNPJ em algumas outras linguagens também, como em GO, dessa forma vamos poder observar e comparar suas diferenças e características, fiquem ligados.

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja
CPFs e CNPJs são numericos tirando a pontuacao.
Não é melhor fazer uma verificação ?
@Marzano
Concordo com você sobre a necessidade de fazer uma verificação sobre os caracteres numéricos!
Escrevi esse código bem simples para essa finalidade:
private static bool VerificaNumeros(string numero)
{
for (int i = 0; i < numero.Length; i++)
{
if (char.IsNumber(numero[i]) == false)
{
return false;
}
}
return true;
}
Espero que ajude ^^
bom dia
o que vocês acham dessa modificação efetuada ?
public static bool IsValid(string doc)
{
return (IsCpf(doc) || IsCnpj(doc) || IsPis(doc));
}
public static bool IsCnpj(string cnpj)
{
cnpj = cnpj.Trim().Replace(“,”, “”).Replace(“.”, “”).Replace(“-“, “”).Replace(“/”, “”);
if (cnpj.Length != 14) return false;
int[] somar = new int[2] { 0, 0 };
int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
string digito;
for (int i = 0; i < 13; i++)
{
if (i < 12) somar[0] += int.Parse(cnpj[i].ToString()) * multiplicador1[i];
somar[1] += int.Parse(cnpj[i].ToString()) * multiplicador2[i];
}
digito = ((somar[0] % 11) < 2 ? 0 : 11 – somar[0] % 11).ToString();
digito += ((somar[1] % 11) < 2 ? 0 : 11 – somar[1] % 11).ToString();
return cnpj.EndsWith(digito);
}
public static bool IsCpf(string cpf)
{
cpf = cpf.Trim().Replace(".", "").Replace("-", "");
if (cpf.Length != 11) return false;
int[] somar = new int[2] { 0, 0 };
int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
string digito;
for (int i = 0; i < 10; i++)
{
if (i < 9) somar[0] += int.Parse(cpf[i].ToString()) * multiplicador1[i];
somar[1] += int.Parse(cpf[i].ToString()) * multiplicador2[i];
}
digito = ((somar[0] % 11) < 2 ? 0 : 11 – somar[0] % 11).ToString();
digito += ((somar[1] % 11) < 2 ? 0 : 11 – somar[1] % 11).ToString();
return cpf.EndsWith(digito);
}
public static bool IsPis(string pis)
{
pis = pis.Trim().Replace("-", "").Replace(".", "").PadLeft(11, '0');
if (pis.Trim().Length != 11) return false;
int[] multiplicador = new int[10] { 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
int resto, soma = 0;
for (int i = 0; i < 10; i++)
soma += int.Parse(pis[i].ToString()) * multiplicador[i];
resto = (soma % 11) < 2 ? 0 : 11 – soma % 11;
return pis.EndsWith(resto.ToString());
}