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:

Visa Mastercard American Express Elo Hipercard Discover Diners Club JCB Maestro

🛡️ 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:

  1. Começar da direita para esquerda: Pegue os dígitos do número do cartão
  2. Dobrar dígitos alternados: Multiplique por 2 cada segundo dígito (começando do penúltimo)
  3. Subtrair 9 se necessário: Se o resultado for maior que 9, subtraia 9
  4. Somar todos os dígitos: Some todos os dígitos resultantes
  5. 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:

  1. Validação no Cliente: Usar algoritmo de Luhn no frontend
  2. Validação no Servidor: Re-validar no backend por segurança
  3. Tokenização: Enviar token ao invés do número real para o gateway
  4. 3D Secure: Implementar autenticação adicional quando possível
  5. 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: