# Fraude de endereço: como cruzar CPF com dados de entrega para detectar golpes

> Aprenda a cruzar dados de CPF com informações de entrega para detectar fraudes de endereço em e-commerce usando API.

**Publicado:** 06/10/2025
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/fraude-de-endereco-como-cruzar-cpf-com-dados-de-entrega

---


Cruzar o CPF do comprador com os dados de entrega é uma das técnicas mais eficazes para detectar fraudes de endereço no e-commerce. A CPFHub.io retorna nome e data de nascimento do titular em aproximadamente 900ms, permitindo identificar em tempo real quando o CPF informado não corresponde ao destinatário ou ao histórico de endereços — e bloquear o pedido antes do envio.

## Introdução

A fraude de endereço é uma das modalidades mais comuns e prejudiciais no e-commerce brasileiro. O golpe funciona assim: o fraudador compra com dados de cartão roubados e informa um endereço de entrega diferente do cadastrado na fatura -- geralmente um ponto de coleta anônimo, uma portaria de prédio comercial ou um endereço de "laranja". Quando o titular do cartão contesta a compra, o lojista arca com o prejuízo do produto entregue e do chargeback.

Cruzar os dados do CPF com as informações de entrega é uma técnica eficaz para detectar inconsistências que indicam fraude.

---

## Como funciona a fraude de endereço

### O fluxo típico

O fraudador obtém dados de cartão de crédito roubados -- seja por phishing, vazamentos ou compra em mercados clandestinos. Com esses dados, faz compras em e-commerces, informando o nome do titular do cartão mas alterando o endereço de entrega. O produto é entregue no endereço do fraudador. O titular legítimo contesta a compra, e o e-commerce sofre o chargeback.

### Variações do golpe

Existem variações sofisticadas. Na fraude de "vizinho cúmplice", o endereço informado é real mas pertence a um cúmplice que recebe e repassa o produto. Na fraude de "endereço de trabalho", o fraudador usa o endereço de um escritório ou coworking onde pode receber encomendas anonimamente. Na "interceptação de entrega", o fraudador monitora o rastreamento e aborda o entregador antes que este chegue ao endereço real.

### Por que o endereço é o elo fraco

O endereço de entrega é o único dado que o fraudador precisa alterar. Nome, CPF e dados do cartão podem ser copiados do titular legítimo, mas o produto precisa ser entregue em um local acessível ao fraudador. Essa inconsistência é detectável.

---

## Sinais de alerta baseados em CPF e endereço

A API da [**CPFHub.io**](https://www.cpfhub.io/) retorna nome e data de nascimento do titular do CPF, dados essenciais para identificar inconsistências antes de aprovar um pedido. A [FEBRABAN](https://www.febraban.org.br/) recomenda o cruzamento de dados cadastrais como camada obrigatória em sistemas antifraude para e-commerce e meios de pagamento.

### Divergência de nome

Se o nome no CPF não corresponde ao nome no cartão de crédito ou ao nome informado no endereço de entrega, há um sinal claro de inconsistência.

### Perfil demográfico incompatível

Um CPF vinculado a uma pessoa de 75 anos comprando um console de videogame para entrega em um bairro universitário pode ser um indicativo de uso fraudulento dos dados de um idoso.

### Múltiplos endereços por CPF

Se o mesmo CPF aparece em pedidos com endereços de entrega em cidades ou estados diferentes em curto período, isso merece investigação.

---

## Implementação em Python

O exemplo a seguir demonstra um sistema de análise de risco que cruza dados de CPF com informações de entrega.

```python
import requests
import re
from datetime import datetime, timedelta
from typing import Optional
from dataclasses import dataclass, field
import json

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

@dataclass
class EnderecoEntrega:
 rua: str
 numero: str
 complemento: str
 bairro: str
 cidade: str
 estado: str
 cep: str
 destinatario: str

@dataclass
class Pedido:
 pedido_id: str
 cpf: str
 nome_comprador: str
 endereco: EnderecoEntrega
 valor: float
 data: datetime
 score_risco: float = 0.0
 alertas: list = field(default_factory=list)

# Histórico de pedidos por CPF (simulação)
historico_pedidos = {} # cpf -> [pedidos]

def consultar_cpf(cpf: str) -> Optional[dict]:
 """Consulta CPF na API CPFHub.io."""
 cpf_limpo = re.sub(r"\D", "", cpf)

 try:
 response = requests.get(
 f"{CPFHUB_API_URL}/{cpf_limpo}",
 headers={
 "x-api-key": CPFHUB_API_KEY,
 "Accept": "application/json",
 },
 timeout=REQUEST_TIMEOUT,
 )
 response.raise_for_status()
 dados = response.json()

 if dados.get("success"):
 return dados["data"]
 return None

 except requests.exceptions.Timeout:
 raise Exception("Timeout na consulta de CPF")
 except requests.exceptions.HTTPError as e:
 status = e.response.status_code
 if status == 404:
 return None
 if status == 401:
 raise Exception("Chave de API inválida")
 raise Exception(f"Erro HTTP {status}")
 except requests.exceptions.RequestException:
 raise Exception("Erro de conexão")

def normalizar_nome(nome: str) -> str:
 """Normaliza nome para comparação."""
 import unicodedata
 normalizado = unicodedata.normalize("NFKD", nome)
 sem_acento = normalizado.encode("ASCII", "ignore").decode("ASCII")
 return sem_acento.upper().strip()

def calcular_score_risco(pedido: Pedido, dados_cpf: dict) -> dict:
 """Calcula score de risco cruzando CPF com dados de entrega."""
 score = 0.0
 alertas = []

 # 1. Verificação de nome
 nome_cpf = normalizar_nome(dados_cpf.get("name", ""))
 nome_comprador = normalizar_nome(pedido.nome_comprador)
 nome_destinatario = normalizar_nome(pedido.endereco.destinatario)

 # Nome do comprador difere do CPF
 if nome_cpf.split()[0] != nome_comprador.split()[0]:
 score += 30
 alertas.append("Primeiro nome do comprador difere do CPF")

 # Destinatário difere do titular do CPF
 if nome_cpf.split()[0] != nome_destinatario.split()[0]:
 score += 20
 alertas.append("Destinatário da entrega difere do titular do CPF")

 # Comprador difere do destinatário
 if nome_comprador != nome_destinatario:
 score += 10
 alertas.append("Nome do comprador difere do destinatário")

 # 2. Análise de idade
 ano_nascimento = dados_cpf.get("year", 0)
 if ano_nascimento:
 idade = datetime.now().year - ano_nascimento

 if idade > 70 and pedido.valor > 500:
 score += 15
 alertas.append(
 f"Titular com {idade} anos em compra de alto valor (R$ {pedido.valor:.2f})"
 )

 if idade < 18:
 score += 25
 alertas.append("Titular é menor de idade")

 # 3. Histórico de endereços
 cpf_limpo = re.sub(r"\D", "", pedido.cpf)
 pedidos_anteriores = historico_pedidos.get(cpf_limpo, [])

 if pedidos_anteriores:
 enderecos_anteriores = set()
 for p in pedidos_anteriores:
 chave = f"{p.endereco.cidade}-{p.endereco.estado}"
 enderecos_anteriores.add(chave)

 endereco_atual = f"{pedido.endereco.cidade}-{pedido.endereco.estado}"

 # Novo endereço em cidade diferente
 if endereco_atual not in enderecos_anteriores:
 score += 15
 alertas.append(
 f"Novo endereço em {pedido.endereco.cidade}/{pedido.endereco.estado} "
 f"-- histórico: {', '.join(enderecos_anteriores)}"
 )

 # Muitos endereços diferentes
 enderecos_com_atual = enderecos_anteriores | {endereco_atual}
 if len(enderecos_com_atual) > 3:
 score += 20
 alertas.append(
 f"{len(enderecos_com_atual)} endereços diferentes para o mesmo CPF"
 )

 # Pedidos recentes (últimas 24h)
 pedidos_24h = [
 p for p in pedidos_anteriores
 if (pedido.data - p.data).total_seconds() < 86400
 ]
 if len(pedidos_24h) >= 3:
 score += 15
 alertas.append(f"{len(pedidos_24h)} pedidos nas últimas 24 horas")

 # 4. Valor do pedido
 if pedido.valor > 1000:
 score += 10
 alertas.append(f"Pedido de alto valor: R$ {pedido.valor:.2f}")

 # Normaliza score para 0-100
 score = min(score, 100)

 return {
 "score": score,
 "nivel": (
 "BAIXO" if score < 30
 else "MEDIO" if score < 60
 else "ALTO"
 ),
 "alertas": alertas,
 "acao_recomendada": (
 "APROVAR" if score < 30
 else "REVISAO_MANUAL" if score < 60
 else "BLOQUEAR"
 ),
 }

def analisar_pedido(
 cpf: str,
 nome_comprador: str,
 endereco: EnderecoEntrega,
 valor: float,
) -> dict:
 """Analisa um pedido cruzando CPF com dados de entrega."""

 cpf_limpo = re.sub(r"\D", "", cpf)

 # Consulta CPF
 try:
 dados_cpf = consultar_cpf(cpf_limpo)
 except Exception as e:
 return {"erro": str(e), "acao": "REVISAO_MANUAL"}

 if not dados_cpf:
 return {
 "erro": "CPF não encontrado",
 "acao": "BLOQUEAR",
 "score": 100,
 }

 pedido = Pedido(
 pedido_id=f"PED-{datetime.now().strftime('%Y%m%d%H%M%S')}",
 cpf=cpf_limpo,
 nome_comprador=nome_comprador,
 endereco=endereco,
 valor=valor,
 data=datetime.now(),
 )

 # Calcula risco
 resultado = calcular_score_risco(pedido, dados_cpf)

 # Registra no histórico
 if cpf_limpo not in historico_pedidos:
 historico_pedidos[cpf_limpo] = []
 pedido.score_risco = resultado["score"]
 pedido.alertas = resultado["alertas"]
 historico_pedidos[cpf_limpo].append(pedido)

 return {
 "pedido_id": pedido.pedido_id,
 "titular_cpf": dados_cpf.get("name"),
 "score_risco": resultado["score"],
 "nivel_risco": resultado["nivel"],
 "acao": resultado["acao_recomendada"],
 "alertas": resultado["alertas"],
 }

# Exemplo de uso
if __name__ == "__main__":
 endereco = EnderecoEntrega(
 rua="Rua das Flores",
 numero="123",
 complemento="Apto 45",
 bairro="Centro",
 cidade="São Paulo",
 estado="SP",
 cep="01001-000",
 destinatario="Maria Souza",
 )

 resultado = analisar_pedido(
 cpf="123.456.789-09",
 nome_comprador="João da Silva",
 endereco=endereco,
 valor=2500.00,
 )

 print(json.dumps(resultado, indent=2, ensure_ascii=False, default=str))
```

---

## Regras de decisão

Com base no score de risco calculado, o sistema pode tomar decisões automáticas ou encaminhar para análise humana.

### Score 0-29 (baixo)

O pedido é aprovado automaticamente. Todos os dados são consistentes e não há alertas significativos.

### Score 30-59 (médio)

O pedido é encaminhado para revisão manual. Um analista verifica os alertas e decide pela aprovação ou rejeição. Nesse nível, é comum encontrar pedidos legítimos -- como presentes enviados para terceiros -- que geram falsos positivos.

### Score 60-100 (alto)

O pedido é bloqueado automaticamente. Múltiplos alertas simultâneos indicam alta probabilidade de fraude. O comprador pode ser contatado para verificação adicional.

---

## Reduzindo falsos positivos

O maior desafio em sistemas antifraude é o equilíbrio entre segurança e experiência do usuário. Algumas situações legítimas geram alertas falsos.

Presentes enviados para terceiros naturalmente terão destinatário diferente do titular do CPF. Para esses casos, ofereça a opção "Enviar como presente" no checkout e ajuste o score. Compras para familiares no mesmo endereço podem ter nomes diferentes mas são legítimas. Mudanças de endereço geram alertas de "novo endereço" mas são eventos normais.

A calibração contínua dos pesos de cada fator no cálculo do score é essencial. Análise periodicamente os falsos positivos e ajuste os limites.

---

## Integração com outros dados

A análise de risco é mais eficaz quando combina múltiplas fontes de dados. O CPF validado pela [**CPFHub.io**](https://www.cpfhub.io/) serve como âncora de identidade: com o nome e data de nascimento confirmados, é possível cruzar com dados de dispositivo, geolocalização e histórico de compras para construir um score de risco mais preciso e reduzir falsos positivos sem abrir mão da segurança.

---

## Perguntas frequentes

### O que é fraude de endereço em e-commerce?

É quando o fraudador usa um CPF legítimo mas direciona a entrega para um endereço diferente do histórico do titular — geralmente um ponto de coleta controlado pelo golpista. A divergência entre o endereço de entrega e o histórico do CPF é o sinal de alerta.

### Como cruzar CPF com dados de entrega para detectar fraude?

A validação de CPF retorna nome e data de nascimento do titular. Ao cruzar esses dados com o histórico de endereços anteriores do CPF no seu sistema, divergências expressivas (CEP de estado diferente em primeira compra, por exemplo) merecem revisão manual.

### Todo pedido com endereço diferente do cadastro é fraude?

Não. Presentes, entregas no trabalho e mudança de endereço são situações legítimas. O sinal fica mais forte quando a divergência de endereço se combina com outros fatores: CPF sem histórico na loja, primeiro pedido de alto valor, pagamento com cartão novo.

### Qual a diferença entre endereço de cobrança e endereço de entrega na detecção de fraude?

Endereço de cobrança diferente do de entrega é comum e legítimo em si. O problema é quando o CPF do comprador não corresponde ao titular do cartão E o endereço de entrega é diferente do histórico — a combinação eleva o risco consideravelmente.

### 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

A fraude de endereço é um problema sério que causa prejuízos de milhões de reais ao e-commerce brasileiro todos os anos. Cruzar os dados do CPF -- validados via API -- com as informações de entrega é uma técnica eficaz para detectar inconsistências e bloquear pedidos fraudulentos antes que o produto seja enviado. A CPFHub.io oferece a infraestrutura necessária para implementar esse cruzamento em tempo real, com latência de aproximadamente 900ms e plano gratuito para começar sem compromisso. Cadastre-se em [cpfhub.io](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.

