O Gerador De CPF O Gerador De CPF

Função para Validar CPF em C#

Classe estática C# para validar CPF usando o algoritmo de módulo 11. Pode ser usada em projetos ASP.NET, APIs Web, aplicações WPF, MAUI ou serviços em background.

Código

using System.Text.RegularExpressions;

public static class CPFValidator
{
    public static bool Validate(string cpf)
    {
        // Remove caracteres não numéricos
        cpf = Regex.Replace(cpf, @"\D", "");

        // Verifica se tem 11 dígitos
        if (cpf.Length != 11) return false;

        // Rejeita CPFs com todos os dígitos iguais
        if (Regex.IsMatch(cpf, @"^(\d)\1{10}$")) return false;

        // Calcula o primeiro dígito verificador
        int sum = 0;
        for (int i = 0; i < 9; i++)
        {
            sum += (cpf[i] - '0') * (10 - i);
        }
        int remainder = sum % 11;
        int digit1 = remainder < 2 ? 0 : 11 - remainder;

        // Calcula o segundo dígito verificador
        sum = 0;
        for (int i = 0; i < 10; i++)
        {
            sum += (cpf[i] - '0') * (11 - i);
        }
        remainder = sum % 11;
        int digit2 = remainder < 2 ? 0 : 11 - remainder;

        // Verifica se os dígitos calculados conferem
        return (cpf[9] - '0') == digit1 && (cpf[10] - '0') == digit2;
    }
}

Análise do código

Regex.Replace(cpf, @"\D", "") remove caracteres não numéricos. Regex.IsMatch(cpf, @"^(\d)\1{10}$") rejeita CPFs com 11 dígitos iguais via backreference.

A conversão cpf[i] - '0' transforma char em int via subtração ASCII — mais eficiente que int.Parse para caracteres individuais.

O primeiro loop calcula o primeiro dígito verificador com pesos de 10 a 2. O segundo calcula o segundo com pesos de 11 a 2. Ambos usam % 11 com a regra: resto < 2 → 0, senão → 11 - resto.

Uso

CPFValidator.Validate("529.982.247-25"); // true
CPFValidator.Validate("111.111.111-11"); // false
CPFValidator.Validate("52998224725");    // true

Testes

Testes com xUnit:

using Xunit;

public class CPFValidatorTests
{
    [Fact]
    public void CpfValidoComPontuacao()
    {
        Assert.True(CPFValidator.Validate("529.982.247-25"));
    }

    [Fact]
    public void CpfValidoSemPontuacao()
    {
        Assert.True(CPFValidator.Validate("52998224725"));
    }

    [Fact]
    public void CpfComDigitosRepetidos()
    {
        Assert.False(CPFValidator.Validate("111.111.111-11"));
    }

    [Fact]
    public void CpfComDigitoVerificadorIncorreto()
    {
        Assert.False(CPFValidator.Validate("529.982.247-26"));
    }

    [Fact]
    public void CpfComTamanhoIncorreto()
    {
        Assert.False(CPFValidator.Validate("123.456.789"));
    }
}

Precisa de CPFs para testar a sua aplicação .NET? Use o gerador de CPF online.