A função
Go
package brdoc
import "regexp"
var reCPF = regexp.MustCompile(`\D`)
// RE2 não tem backreference, então repetidos vão por função, não por regex.
func allSame(s string) bool {
for i := 1; i < len(s); i++ {
if s[i] != s[0] {
return false
}
}
return len(s) > 0
}
func IsValidCPF(cpf string) bool {
cpf = reCPF.ReplaceAllString(cpf, "")
if len(cpf) != 11 || allSame(cpf) {
return false
}
for i := 9; i < 11; i++ {
soma := 0
for j := 0; j < i; j++ {
soma += int(cpf[j]-'0') * ((i + 1) - j)
}
dv := (soma * 10 % 11) % 10
if dv != int(cpf[i]-'0') {
return false
}
}
return true
}
// IsValidCPF("111.444.777-35") -> true
// 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. A pontuação é removida por reCPF (o padrão \D) antes de qualquer conta.
Cuidados
- Repetidos não vão por regex. O
regexpdo Go usa RE2, que não suporta backreference — um padrão como^(\d)\1{10}$nem compila. Por isso a checagem de sequências repetidas (11111111111) é a funçãoallSame, que compara cada caractere com o primeiro. É a diferença em relação a linguagens com PCRE (PHP, Java, C#). - Regex só valida formato. O
\Dapenas limpa não-dígitos; quem confere o verificador é a função acima. Veja regex de CPF e CNPJ. - Válido ≠ existe. A função 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) e formate só na exibição.
publicidade
Continue
Perguntas frequentes
Preciso de alguma biblioteca para validar CPF em Go?
Não. A função usa só a biblioteca padrão (
regexp e strings). Se preferir uma lib mantida, há klassmann/cpfcnpj e paemuri/brdoc.O regex do Go aceita <code>\1</code> para pegar repetidos?
Não. O
regexp do Go usa RE2, que não tem backreference. Por isso a checagem de sequências repetidas é a função allSame, e não um padrão como ^(\d)\1{10}$.A função diz se o CPF existe?
Não. Ela confere a consistência matemática (os dois dígitos verificadores), não se o documento foi emitido pela Receita.
Código verificado por transliteração contra o núcleo (casos válidos e inválidos). Algoritmo módulo 11 oficial. Revisado em 06/2026.