# Como prevenir fraudes em programas de indicação (referral) com validação de CPF

> Aprenda a usar validação de CPF via API para impedir fraudes em programas de indicação e referral em e-commerces e apps.

**Publicado:** 22/08/2025
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/como-prevenir-fraudes-em-programas-de-indicacao-referral-com-validacao-de-cpf

---


Fraudes em programas de indicação acontecem quando fraudadores criam múltiplas contas falsas para simular indicações e embolsar bônus indevidos. A CPFHub.io permite validar cada CPF cadastrado em ~900ms, garantindo que indicador e indicado são pessoas reais e distintas — bloqueando a fraude na raiz antes que qualquer bônus seja liberado.

## Introdução

Programas de indicação -- conhecidos como referral programs -- são uma das estratégias de crescimento mais eficazes no e-commerce e em aplicativos. A lógica é simples: um cliente existente indica um amigo, ambos ganham um benefício, e a plataforma adquire um novo usuário a um custo menor do que canais pagos. O problema é que essa mecânica é extremamente vulnerável a fraudes.

Fraudadores criam dezenas de contas falsas para simular indicações, embolsando os bônus de ambos os lados. A validação de CPF via API é a forma mais eficaz de garantir que cada indicação envolve pessoas reais e distintas.

---

## Anatomia da fraude em referral

### O esquema clássico

O fraudador cria uma conta principal com dados reais. Em seguida, gera dezenas de contas secundárias com e-mails descartáveis, usando o link de indicação da conta principal. Cada conta secundária completa a ação necessária -- geralmente uma primeira compra de valor mínimo -- e o bônus é creditado tanto para a conta principal quanto para a secundária.

### Variações mais sofisticadas

Fraudes mais elaboradas envolvem redes de fraudadores que trocam indicações entre si, cada um usando seu CPF real mas combinando para maximizar os bônus. Outras variações incluem o uso de CPFs de terceiros (familiares falecidos, por exemplo) para criar contas que parecem legítimas.

### Impacto nos negócios

Além do prejuízo financeiro direto -- que pode representar milhares de reais por mês em bônus indevidos -- a fraude em referral distorce métricas críticas como CAC (custo de aquisição de cliente), taxa de conversão e lifetime value. Decisões estratégicas baseadas em dados contaminados levam a investimentos errados.

---

## Estratégia de proteção com CPF

A validação de CPF atua em três pontos do fluxo de indicação.

### Ponto 1 -- Cadastro do indicador

Antes de permitir que um usuário gere links de indicação, exija a verificação de CPF. Isso garante que a conta principal pertence a uma pessoa real.

### Ponto 2 -- Cadastro do indicado

Quando alguém se cadastra usando um link de indicação, solicite o CPF e valide-o. Compare com o CPF do indicador para garantir que são pessoas diferentes.

### Ponto 3 -- Liberação do bônus

Antes de creditar o bônus, faça uma verificação final: confirme que o CPF do indicado não está associado a nenhuma outra conta na plataforma e que não coincide com o CPF do indicador.

---

## Implementação em Node.js

O exemplo a seguir demonstra um sistema de referral com proteção por CPF.

```javascript
const express = require("express");
const axios = require("axios");
const crypto = require("crypto");

const app = express();
app.use(express.json());

const CPFHUB_API_URL = "https://api.cpfhub.io/cpf";
const CPFHUB_API_KEY = "SUA_CHAVE_DE_API";
const REQUEST_TIMEOUT = 10000; // 10 segundos

// Simulação de banco de dados
const usuarios = new Map();
const indicacoes = new Map();
const cpfsRegistrados = new Set();

function limparCpf(cpf) {
 return cpf.replace(/\D/g, "");
}

async function consultarCpf(cpf) {
 const cpfLimpo = limparCpf(cpf);

 try {
 const response = await axios.get(`${CPFHUB_API_URL}/${cpfLimpo}`, {
 headers: {
 "x-api-key": CPFHUB_API_KEY,
 Accept: "application/json",
 },
 timeout: REQUEST_TIMEOUT,
 });

 if (response.data.success) {
 return response.data.data;
 }
 return null;
 } catch (error) {
 if (error.code === "ECONNABORTED") {
 throw new Error("Timeout na consulta de CPF");
 }
 if (error.response) {
 const { status } = error.response;
 if (status === 401) throw new Error("API key inválida");
 if (status === 404) return null;
 }
 throw new Error("Erro na consulta de CPF");
 }
}

function gerarCodigoReferral() {
 return crypto.randomBytes(4).toString("hex").toUpperCase();
}

// Endpoint: verificar CPF e habilitar referral
app.post("/api/referral/habilitar", async (req, res) => {
 const { usuarioId, cpf } = req.body;

 if (!usuarioId || !cpf) {
 return res.status(400).json({ erro: "usuarioId e cpf são obrigatórios" });
 }

 const cpfLimpo = limparCpf(cpf);

 // Verifica se CPF já está em uso
 if (cpfsRegistrados.has(cpfLimpo)) {
 const usuarioExistente = [...usuarios.values()].find(
 (u) => u.cpf === cpfLimpo
 );
 if (usuarioExistente && usuarioExistente.id !== usuarioId) {
 return res.status(409).json({
 erro: "Este CPF já está vinculado a outra conta",
 });
 }
 }

 try {
 const dados = await consultarCpf(cpfLimpo);
 if (!dados) {
 return res.status(422).json({
 erro: "CPF não encontrado na base de dados",
 });
 }

 const codigoReferral = gerarCodigoReferral();

 usuarios.set(usuarioId, {
 id: usuarioId,
 cpf: cpfLimpo,
 nome: dados.name,
 dataNascimento: dados.birthDate,
 codigoReferral,
 indicacoesRealizadas: 0,
 bonusAcumulado: 0,
 habilitadoEm: new Date().toISOString(),
 });

 cpfsRegistrados.add(cpfLimpo);

 res.json({
 sucesso: true,
 codigoReferral,
 mensagem: `Referral habilitado para ${dados.name}`,
 });
 } catch (error) {
 res.status(503).json({ erro: error.message });
 }
});

// Endpoint: cadastro via indicação
app.post("/api/referral/cadastro", async (req, res) => {
 const { nome, email, cpf, codigoReferral } = req.body;

 if (!cpf || !codigoReferral) {
 return res.status(400).json({
 erro: "CPF e código de indicação são obrigatórios",
 });
 }

 const cpfLimpo = limparCpf(cpf);

 // Verifica se o código de referral existe
 const indicador = [...usuarios.values()].find(
 (u) => u.codigoReferral === codigoReferral
 );

 if (!indicador) {
 return res.status(404).json({ erro: "Código de indicação inválido" });
 }

 // Proteção 1: CPF do indicado não pode ser igual ao do indicador
 if (cpfLimpo === indicador.cpf) {
 return res.status(403).json({
 erro: "Não é possível usar o próprio código de indicação",
 });
 }

 // Proteção 2: CPF não pode estar em uso
 if (cpfsRegistrados.has(cpfLimpo)) {
 return res.status(409).json({
 erro: "Este CPF já possui uma conta na plataforma",
 });
 }

 // Proteção 3: validar CPF via API
 try {
 const dados = await consultarCpf(cpfLimpo);
 if (!dados) {
 return res.status(422).json({
 erro: "CPF não encontrado na base de dados",
 });
 }

 // Proteção 4: verificar que são pessoas diferentes
 // (mesmo sobrenome + mesma data nascimento pode indicar fraude familiar)
 const sobrenomeIndicador = indicador.nome.split(" ").pop().toUpperCase();
 const sobrenomeIndicado = dados.name.split(" ").pop().toUpperCase();
 const mesmoSobrenome = sobrenomeIndicador === sobrenomeIndicado;
 const mesmaFamilia =
 mesmoSobrenome &&
 dados.birthDate &&
 indicador.dataNascimento &&
 dados.year === indicador.dataNascimento.split("/").pop();

 const novoUsuarioId = crypto.randomUUID();

 usuarios.set(novoUsuarioId, {
 id: novoUsuarioId,
 cpf: cpfLimpo,
 nome: dados.name,
 dataNascimento: dados.birthDate,
 indicadoPor: indicador.id,
 codigoReferral: gerarCodigoReferral(),
 indicacoesRealizadas: 0,
 bonusAcumulado: 0,
 habilitadoEm: new Date().toISOString(),
 });

 cpfsRegistrados.add(cpfLimpo);

 // Registra a indicação (bônus pendente até primeira compra)
 indicacoes.set(`${indicador.id}-${novoUsuarioId}`, {
 indicadorId: indicador.id,
 indicadoId: novoUsuarioId,
 status: "PENDENTE",
 alertaFamiliar: mesmaFamilia,
 criadoEm: new Date().toISOString(),
 });

 res.json({
 sucesso: true,
 usuarioId: novoUsuarioId,
 indicadoPor: indicador.nome,
 bonusPendente: true,
 alertaRevisao: mesmaFamilia,
 mensagem: mesmaFamilia
 ? "Cadastro realizado. Bônus sujeito a revisão manual."
 : "Cadastro realizado. Bônus será liberado após primeira compra.",
 });
 } catch (error) {
 res.status(503).json({ erro: error.message });
 }
});

// Endpoint: liberar bônus após primeira compra
app.post("/api/referral/liberar-bonus", async (req, res) => {
 const { indicadoId, valorCompra } = req.body;

 const indicado = usuarios.get(indicadoId);
 if (!indicado || !indicado.indicadoPor) {
 return res.status(404).json({ erro: "Indicação não encontrada" });
 }

 const chave = `${indicado.indicadoPor}-${indicadoId}`;
 const indicacao = indicacoes.get(chave);

 if (!indicacao || indicacao.status !== "PENDENTE") {
 return res.status(400).json({ erro: "Bônus já processado ou inexistente" });
 }

 // Verifica se a compra atinge o valor mínimo
 const VALOR_MINIMO = 50.0;
 if (valorCompra < VALOR_MINIMO) {
 return res.status(400).json({
 erro: `Compra mínima de R$ ${VALOR_MINIMO} para ativar bônus`,
 });
 }

 // Se há alerta familiar, requer revisão manual
 if (indicacao.alertaFamiliar) {
 indicacao.status = "REVISAO_MANUAL";
 return res.json({
 sucesso: true,
 status: "REVISAO_MANUAL",
 mensagem: "Bônus encaminhado para revisão manual",
 });
 }

 // Libera bônus para ambos
 const BONUS_INDICADOR = 25.0;
 const BONUS_INDICADO = 25.0;

 const indicador = usuarios.get(indicado.indicadoPor);
 indicador.bonusAcumulado += BONUS_INDICADOR;
 indicador.indicacoesRealizadas += 1;
 indicado.bonusAcumulado += BONUS_INDICADO;
 indicacao.status = "LIBERADO";

 res.json({
 sucesso: true,
 bonusIndicador: BONUS_INDICADOR,
 bonusIndicado: BONUS_INDICADO,
 mensagem: "Bônus liberado para ambos os participantes",
 });
});

app.listen(3000, () => {
 console.log("Servidor rodando na porta 3000");
});
```

---

## Detecção de padrões suspeitos

Além da validação unitária de CPF, é importante monitorar padrões que indicam fraude organizada. A [FEBRABAN](https://www.febraban.org.br/) recomenda que plataformas digitais implementem camadas de análise comportamental complementares à validação de identidade.

### Indicadores de alerta

Existem vários sinais que merecem atenção. Um indicador que acumula um número anormal de indicações bem-sucedidas em curto período. Indicações em que indicador e indicado compartilham o mesmo sobrenome e faixa etária. Múltiplos cadastros originados do mesmo endereço IP em sequência. Indicados que fazem apenas a compra mínima para ativar o bônus e nunca mais retornam.

### Score de risco

Atribua um score de risco a cada indicação com base nesses indicadores. Indicações com score alto devem passar por revisão manual antes da liberação do bônus.

---

## Limites e controles

Para complementar a validação de CPF, implemente limites operacionais no programa de referral.

Defina um número máximo de indicações por CPF por mês -- um valor entre 5 e 10 é razoável para a maioria dos programas. Estabeleça um valor mínimo de primeira compra que seja significativo o suficiente para desencorajar fraudes -- se o bônus é de R$ 25, a compra mínima deve ser consideravelmente maior. Implemente um período de carência entre o cadastro e a liberação do bônus, permitindo que análises de fraude sejam executadas. Considere liberar o bônus em crédito na plataforma em vez de dinheiro, reduzindo a atratividade para fraudadores.

---

## Métricas de saúde do programa

A validação de CPF permite acompanhar métricas que revelam a saúde do programa de referral.

A **taxa de rejeição por CPF duplicado** indica a proporção de tentativas de fraude por duplicação de conta. A **taxa de indicações entre parentes** (mesmo sobrenome) ajuda a calibrar as regras -- nem toda indicação familiar é fraude, mas uma taxa muito alta merece investigação. O **lifetime value dos indicados** comparado com o de usuários orgânicos revela se o programa está atraindo clientes genuínos ou apenas caçadores de bônus.

---

## Custo-benefício

O custo de validação de CPF é insignificante comparado ao potencial de perda com fraude em referral. Com o plano Pro da [**CPFHub.io**](https://www.cpfhub.io/), a plataforma realiza até 1.000 consultas mensais por R$149 — o equivalente a menos de R$0,15 por verificação, muito abaixo do valor de qualquer bônus de indicação.

---

## Perguntas frequentes

### Como funciona a fraude em programas de indicação?

O fraudador cria múltiplas contas falsas (com CPFs diferentes) e usa o código de indicação da conta principal para simular indicações legítimas. Cada "indicação" gera crédito para o indicador, sem que nenhuma conta secundária seja de um usuário real.

### Como a validação de CPF detecta auto-referência?

Ao verificar que cada CPF cadastrado é único, real e com nome correspondente, a plataforma elimina as contas fictícias criadas para simular indicações. Sem contas falsas, não há indicações falsas — o bônus de referral é pago apenas por indicações de pessoas reais.

### Além do CPF, que outras verificações fortalecem o programa de referral?

Validação de número de telefone (SMS OTP), verificação de e-mail, análise de IP (identificar múltiplas contas do mesmo dispositivo) e período de carência antes de liberar o bônus (para confirmar que o indicado realmente usou o serviço). O CPF é a camada de identidade; as demais reduzem bots.

### Qual o impacto financeiro da fraude em programas de referral?

Depende do valor do bônus e do volume. Empresas com bônus de R$50 por indicação e escala de campanhas podem perder centenas de milhares de reais em fraude de referral. O custo de implementar validação de CPF é uma fração desse valor.

### Leia também

- [Golpe do CPF clonado em compras online: como detectar e prevenir](https://cpfhub.io/blog/golpe-cpf-clonado-compras-online-detectar-prevenir)
- [Fraude no PIX: como validação de CPF previne golpes em e-commerce](https://cpfhub.io/blog/fraude-no-pix-como-validacao-de-cpf-previne-golpes-em-ecommerce)
- [Como evitar chargebacks usando validação de CPF no checkout](https://cpfhub.io/blog/como-evitar-chargebacks-usando-validacao-de-cpf-no-checkout)
- [IA generativa e fraudes de identidade: por que validação de CPF é mais importante que nunca](https://cpfhub.io/blog/ia-generativa-e-fraudes-de-identidade-por-que-validacao-de-cpf-e-mais-importante-que-nunca)

---

## Conclusão

Programas de indicação são motores de crescimento poderosos, mas apenas quando os participantes são reais. A validação de CPF via API transforma o referral de um canal vulnerável a fraudes em um mecanismo confiável e mensurável de aquisição de clientes. Com a [**CPFHub.io**](https://www.cpfhub.io/), cada verificação custa menos de R$0,15 e retorna em ~900ms — uma proteção de altíssimo custo-benefício para qualquer programa de indicação.

Cadastre-se em [cpfhub.io](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.

