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.