O método
C#
using System.Text.RegularExpressions;
public static class Doc {
public static bool IsValidCpf(string cpf) {
cpf = Regex.Replace(cpf, @"\D", "");
if (cpf.Length != 11 || Regex.IsMatch(cpf, @"^(\d)\1{10}$")) return false;
for (int i = 9; i < 11; i++) {
int soma = 0;
for (int j = 0; j < i; j++) soma += (cpf[j] - '0') * ((i + 1) - j);
int dv = (soma * 10 % 11) % 10;
if (dv != cpf[i] - '0') return false;
}
return true;
}
}
Doc.IsValidCpf("111.444.777-35"); // true
Doc.IsValidCpf("111.444.777-00"); // falseO cálculo é o do módulo 11: cada dígito é multiplicado por um peso decrescente, somado, e o resto da divisão por 11 define o verificador. O Regex.Replace(cpf, @"\D", "") remove qualquer pontuação antes de começar.
publicidade
Cuidados
- Regex só valida formato. Um padrão como
^\d{11}$confirma que são 11 dígitos, mas não confere o verificador — quem faz isso é o método acima. Veja regex de CPF. - Sequências repetidas (
11111111111) passariam no módulo 11, por isso o método as descarta antes com^(\d)\1{10}$. - Válido ≠ existe. O método confirma a consistência matemática, não se o CPF foi emitido a alguém.
- Guarde sem máscara (só os 11 dígitos, em
string) e formate só na exibição.
Continue
Código em C# verificado (casos válidos e inválidos). Algoritmo módulo 11 oficial. Revisado em 06/2026.