Dica: Validação de CPF e CNPJ no C#

Facebooktwitterredditpinterestlinkedinmail

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.

Facebooktwitterredditpinterestlinkedinmail

4 thoughts on “Dica: Validação de CPF e CNPJ no C#

    1. @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 ^^

  1. 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());
    }

Deixe uma resposta para Marzano Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *