Validar CPFs manualmente é uma tarefa repetitiva e propensa a erros. Utilizar expressões regulares no Linux permite automatizar essa verificação de forma rápida e precisa, garantindo que apenas formatos válidos sejam aceitos.
A expressão regular a seguir verifica se o CPF está no formato correto, com ou sem máscara:
^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$
Crie um arquivo chamado validar_cpf.sh com o seguinte conteúdo:
#!/bin/bash
# Função para validar o formato do CPF
validar_formato() {
local cpf="$1"
if [[ "$cpf" =~ ^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$ ]]; then
echo "Formato válido"
else
echo "Formato inválido"
fi
}
# Exemplo de uso
echo "Digite o CPF:"
read cpf
validar_formato "$cpf"
Para uma validação mais robusta, incluindo o algoritmo de verificação dos dígitos, use:
#!/bin/bash
validar_cpf() {
local cpf="$1"
# Remove caracteres não numéricos
cpf=$(echo "$cpf" | tr -d '.' | tr -d '-')
# Verifica se tem 11 dígitos
if [[ ${#cpf} -ne 11 ]]; then
echo "CPF inválido"
return 1
fi
# Verifica se todos os dígitos são iguais
if [[ "$cpf" =~ ^(.)\1{10}$ ]]; then
echo "CPF inválido"
return 1
fi
# Algoritmo de validação
local soma=0
for i in {10..2}; do
soma=$((soma + ${cpf:10-$i:1} * i))
done
local dv1=$((soma * 10 % 11))
dv1=$((dv1 == 10 ? 0 : dv1))
soma=0
for i in {11..2}; do
soma=$((soma + ${cpf:11-$i:1} * i))
done
local dv2=$(((soma + dv1 * 2) * 10 % 11))
dv2=$((dv2 == 10 ? 0 : dv2))
if [[ ${cpf:9:1} -eq $dv1 && ${cpf:10:1} -eq $dv2 ]]; then
echo "CPF válido"
else
echo "CPF inválido"
fi
}
# Exemplo de uso
echo "Digite o CPF:"
read cpf
validar_cpf "$cpf"
| CPF de Entrada | Formato Válido? | CPF Válido? |
|---|---|---|
| 123.456.789-09 | Sim | Não |
| 529.982.247-25 | Sim | Sim |
| 12345678909 | Sim | Não |
| 111.111.111-11 | Sim | Não |
Com este método, você automatiza a validação de CPFs em segundos, evitando erros manuais e garantindo que apenas documentos no formato e algoritmo corretos sejam aceitos no seu sistema.