O Gerador De CPF O Gerador De CPF

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.