Função para Validar CPF em TypeScript
Função TypeScript para validar CPF usando o algoritmo de módulo 11. Mesma lógica da versão JavaScript, com tipagem estática que previne erros em tempo de compilação.
Código
function calcChecker(digits: string, factor: number): number {
let sum = 0;
for (let i = 0; i < digits.length; i++) {
sum += parseInt(digits.charAt(i), 10) * (factor - i);
}
const remainder = sum % 11;
return remainder < 2 ? 0 : 11 - remainder;
}
function validateCPF(cpf: string): boolean {
const cleaned = cpf.replace(/\D/g, '');
if (cleaned.length !== 11) return false;
// Rejeita CPFs com todos os dígitos iguais
if (/^(\d)\1{10}$/.test(cleaned)) return false;
const firstNine = cleaned.substring(0, 9);
const checker1 = calcChecker(firstNine, 10);
const checker2 = calcChecker(firstNine + checker1, 11);
return cleaned.endsWith(`${checker1}${checker2}`);
}
Análise do código
calcChecker é uma função genérica que calcula qualquer dígito verificador: recebe os dígitos e o fator multiplicador inicial, soma os produtos dígito * (fator - i), aplica % 11 e retorna 0 se resto < 2, senão 11 - resto.
validateCPF limpa a entrada com /\D/g, verifica comprimento, rejeita repetidos com regex backreference ^(\d)\1{10}$, e compara os dois dígitos calculados com endsWith.
Uso
validateCPF("529.982.247-25"); // true
validateCPF("111.111.111-11"); // false
validateCPF("52998224725"); // true
Testes
Testes com Vitest:
import { describe, it, expect } from 'vitest';
describe('validateCPF', () => {
it('retorna true para CPF válido com pontuação', () => {
expect(validateCPF('529.982.247-25')).toBe(true);
});
it('retorna true para CPF válido sem pontuação', () => {
expect(validateCPF('52998224725')).toBe(true);
});
it('retorna false para CPF com dígitos repetidos', () => {
expect(validateCPF('111.111.111-11')).toBe(false);
});
it('retorna false para CPF com dígito verificador incorreto', () => {
expect(validateCPF('529.982.247-26')).toBe(false);
});
it('retorna false para CPF com tamanho incorreto', () => {
expect(validateCPF('123.456.789')).toBe(false);
});
});
Precisa de CPFs válidos para rodar esses testes? Use o gerador de CPF para criar números de teste em lote.