Validador de Cartão de Crédito
Valide números de cartão com o algoritmo de Luhn e detecte a bandeira automaticamente
💳 Bandeiras suportadas:
🛡️ Validação de Cartão de Crédito Online
Nosso validador de cartão de crédito utiliza o algoritmo de Luhn (também conhecido como algoritmo "módulo 10") para verificar se um número de cartão é matematicamente válido. Esta ferramenta é essencial para desenvolvedores que precisam implementar validação de cartões em seus sistemas de pagamento.
O validador detecta automaticamente a bandeira do cartão (Visa, Mastercard, Elo, Hipercard, American Express, etc.) através dos primeiros dígitos do número, conhecidos como BIN (Bank Identification Number).
🔍 O que é o Algoritmo de Luhn?
O algoritmo de Luhn, criado por Hans Peter Luhn em 1954, é uma fórmula de checksum usada para validar números de identificação, especialmente números de cartões de crédito. Ele protege contra erros de digitação acidentais, mas não é um método de segurança criptográfica.
Como funciona o algoritmo:
- Começar da direita para esquerda: Pegue os dígitos do número do cartão
- Dobrar dígitos alternados: Multiplique por 2 cada segundo dígito (começando do penúltimo)
- Subtrair 9 se necessário: Se o resultado for maior que 9, subtraia 9
- Somar todos os dígitos: Some todos os dígitos resultantes
- Verificar módulo 10: Se a soma é divisível por 10, o número é válido
Exemplo prático:
Número: 4532 0151 1416 8748
Passo 1: 8 7 4 8 6 1 4 1 1 5 0 2 3 5 4
Passo 2: Dobrar alternados: 8 14 4 16 6 2 4 2 1 10 0 4 3 10 4
Passo 3: Subtrair 9: 8 5 4 7 6 2 4 2 1 1 0 4 3 1 4
Passo 4: Soma: 8+5+4+7+6+2+4+2+1+1+0+4+3+1+4 = 52
Resultado: 52 % 10 = 2 (não divisível) = ❌ Inválido
💳 Bandeiras de Cartão Suportadas
Nosso validador identifica automaticamente as seguintes bandeiras através dos prefixos BIN:
Bandeira | Prefixos | Comprimento |
---|---|---|
Visa | 4 | 13, 16, 19 dígitos |
Mastercard | 51-55, 2221-2720 | 16 dígitos |
American Express | 34, 37 | 15 dígitos |
Elo | 4011, 4312, 4389, 5067, 6277, 6362, 6363 | 16 dígitos |
Hipercard | 3841, 6062 | 13, 16, 19 dígitos |
Discover | 6011, 622126-622925, 644-649, 65 | 16-19 dígitos |
Diners Club | 300-305, 36, 38 | 14 dígitos |
JCB | 3528-3589 | 16-19 dígitos |
Maestro | 5018, 5020, 5038, 5893, 6304, 6759, 6761, 6762, 6763 | 12-19 dígitos |
💻 Exemplo de Código - JavaScript
Veja como implementar o algoritmo de Luhn em JavaScript:
function validateLuhn(cardNumber) {
// Remove espaços e caracteres não numéricos
const cleaned = cardNumber.replace(/\D/g, '');
// Verifica se tem apenas dígitos
if (!/^\d+$/.test(cleaned)) return false;
// Verifica comprimento (13-19 dígitos)
if (cleaned.length < 13 || cleaned.length > 19) return false;
let sum = 0;
let isEven = false;
// Percorre da direita para esquerda
for (let i = cleaned.length - 1; i >= 0; i--) {
let digit = parseInt(cleaned[i]);
if (isEven) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
isEven = !isEven;
}
// Válido se divisível por 10
return sum % 10 === 0;
}
// Exemplo de uso
console.log(validateLuhn("4532015112830366")); // true
console.log(validateLuhn("1234567890123456")); // false
🎯 Casos de Uso
O validador de cartão de crédito é útil em diversas situações:
- Desenvolvimento de E-commerce: Validar cartões antes de enviar para gateway de pagamento
- Testes de Software: Verificar se a lógica de validação está funcionando corretamente
- Formulários Web: Validação em tempo real enquanto usuário digita
- Redução de Erros: Detectar erros de digitação antes de processar pagamento
- UX/UI: Detectar bandeira automaticamente e mostrar ícone correto
- Desenvolvimento de APIs: Validar dados de entrada em endpoints de pagamento
- Depuração: Verificar se números de teste estão corretos
- Educação: Aprender como funciona o algoritmo de Luhn
🔒 Segurança e Privacidade
Importante: Este validador verifica apenas se o número é matematicamente válido segundo o algoritmo de Luhn. Isso não significa que o cartão existe, está ativo ou pode ser usado para pagamentos.
⚠️ Avisos de Segurança:
- Nunca use números de cartão reais de terceiros
- Este validador NÃO armazena ou transmite nenhum dado
- A validação acontece 100% no seu navegador
- Não use para validar cartões roubados ou fraudulentos
- Para processar pagamentos reais, use APIs de gateway confiáveis (Stripe, PagSeguro, Mercado Pago)
- O algoritmo de Luhn protege contra erros de digitação, não contra fraudes
🧪 Números de Teste para Desenvolvimento
Use estes números válidos (algoritmo de Luhn) para testes em ambiente de desenvolvimento:
Visa:
- 4532 0151 1283 0366
- 4916 3385 0941 4097
- 4024 0071 5336 4839
Mastercard:
- 5425 2334 3010 9903
- 5555 5555 5555 4444
- 5105 1051 0510 5100
American Express:
- 3782 822463 10005
- 3714 496353 98431
- 3787 344936 71000
Elo:
- 6362 9702 0442 5345
- 5067 2680 4520 2395
Nota: Estes são números de teste públicos. Não funcionam para transações reais.
🛠️ Implementação em Diferentes Linguagens
Python:
def validate_luhn(card_number):
digits = [int(d) for d in card_number.replace(" ", "")]
checksum = 0
for i, digit in enumerate(reversed(digits)):
if i % 2 == 1:
digit *= 2
if digit > 9:
digit -= 9
checksum += digit
return checksum % 10 == 0
# Teste
print(validate_luhn("4532015112830366")) # True
PHP:
function validateLuhn($cardNumber) {
$cleaned = preg_replace('/\D/', '', $cardNumber);
$sum = 0;
$isEven = false;
for ($i = strlen($cleaned) - 1; $i >= 0; $i--) {
$digit = (int)$cleaned[$i];
if ($isEven) {
$digit *= 2;
if ($digit > 9) {
$digit -= 9;
}
}
$sum += $digit;
$isEven = !$isEven;
}
return $sum % 10 === 0;
}
// Teste
var_dump(validateLuhn("4532015112830366")); // true
Java:
public static boolean validateLuhn(String cardNumber) {
String cleaned = cardNumber.replaceAll("[^0-9]", "");
int sum = 0;
boolean isEven = false;
for (int i = cleaned.length() - 1; i >= 0; i--) {
int digit = Character.getNumericValue(cleaned.charAt(i));
if (isEven) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
isEven = !isEven;
}
return sum % 10 == 0;
}
// Teste
System.out.println(validateLuhn("4532015112830366")); // true
📊 Estatísticas de Uso de Cartões no Brasil
O mercado de cartões de crédito no Brasil é um dos maiores da América Latina:
- Mais de 150 milhões de cartões de crédito em circulação
- Visa e Mastercard dominam cerca de 80% do mercado
- Elo é a principal bandeira nacional brasileira
- Crescimento anual médio de 15% em transações digitais
- Cartões contactless (NFC) representam 40% das novas emissões
🔗 Integração com Gateways de Pagamento
Ao desenvolver sistemas de pagamento, é fundamental integrar com gateways confiáveis:
Principais Gateways no Brasil:
- Stripe: API moderna, ótima documentação, suporte internacional
- PagSeguro: Solução completa do UOL, muito popular no e-commerce brasileiro
- Mercado Pago: Integrado ao Mercado Livre, fácil implementação
- Cielo: Uma das maiores adquirentes do Brasil
- Rede: Grande presença no varejo físico
- PayPal: Reconhecimento internacional, confiança do consumidor
Fluxo de Validação Recomendado:
- Validação no Cliente: Usar algoritmo de Luhn no frontend
- Validação no Servidor: Re-validar no backend por segurança
- Tokenização: Enviar token ao invés do número real para o gateway
- 3D Secure: Implementar autenticação adicional quando possível
- Logging: Registrar tentativas (sem armazenar números completos)
❓ Perguntas Frequentes (FAQ)
1. Este validador verifica se o cartão tem saldo?
Não. O validador apenas verifica se o número é matematicamente válido segundo o algoritmo de Luhn. Não há como verificar saldo, validade ou se o cartão está ativo sem acessar sistemas bancários.
2. Posso usar este validador para aceitar pagamentos reais?
Não. Esta ferramenta é apenas para validação de formato. Para processar pagamentos reais, você DEVE usar um gateway de pagamento certificado PCI DSS (como Stripe, PagSeguro, Mercado Pago).
3. Por que meu cartão válido mostra como inválido?
Verifique se digitou todos os números corretamente. Um único dígito errado invalida o algoritmo de Luhn. Também confirme se o cartão tem entre 13 e 19 dígitos.
4. O validador armazena os números que eu testo?
Não. Toda a validação acontece 100% no seu navegador. Nenhum dado é enviado para servidores externos ou armazenado.
5. Qual a diferença entre BIN e PAN?
BIN (Bank Identification Number): Os primeiros 6-8 dígitos que identificam o banco emissor
e a bandeira.
PAN (Primary Account Number): O número completo do cartão, incluindo BIN, identificador
da conta e dígito verificador.
6. Por que o algoritmo de Luhn é tão usado?
É simples, rápido e detecta eficientemente erros comuns de digitação (transposição de dígitos, dígitos errados). Foi padronizado pela ISO/IEC 7812-1.
7. Posso validar cartões de débito?
Sim! O algoritmo de Luhn se aplica a cartões de crédito e débito, já que ambos seguem o mesmo padrão de numeração.
8. Como implementar validação em tempo real em formulários?
Use eventos JavaScript como onInput
ou onChange
para validar enquanto o usuário
digita, mostrando feedback visual imediato (borda verde/vermelha, ícone de bandeira).
9. O que é o CVV e ele pode ser validado com Luhn?
CVV (Card Verification Value) são os 3-4 dígitos no verso do cartão. Ele NÃO pode ser validado com algoritmo de Luhn, pois é gerado por algoritmo criptográfico diferente.
10. Por que alguns cartões virtuais têm formatos diferentes?
Cartões virtuais (como Nubank, PicPay, Mercado Pago) podem ter BINs diferentes, mas ainda seguem o padrão Luhn. Nosso validador suporta todos os formatos válidos.
🎓 Recursos Adicionais
🚀 Precisa de Outras Ferramentas?
Explore nossos outros validadores e geradores: