# Validador de cartão de crédito (Luhn e bandeira)

> O validador de cartão de crédito confere se um número passa no algoritmo de Luhn, o dígito verificador dos cartões, e identifica a bandeira pelos primeiros dígitos: Visa, Mastercard, American Express, Hipercard, Diners, Discover e JCB. A conferência é feita no seu navegador e não diz se o cartão existe ou tem limite.

- Endereço oficial: https://pradev.com.br/validador-de-cartao-de-credito
- Categoria: Pagamentos e bancário
- Tipo: Validador
- Atualizado em: 2026-10-01
- Autor: Leonardo Gaertner (https://pradev.com.br/sobre)
- Preço: grátis, sem cadastro. O processamento acontece no navegador de quem usa.

## Como usar

1. Digite o número do cartão, com ou sem espaços.
2. A partir de 12 dígitos, o resultado aparece na hora, com a bandeira.
3. Se o tamanho não for o comum para a bandeira, aparece um aviso.

## Como funciona

A ferramenta aplica o algoritmo de Luhn: da direita para a esquerda, dobra um dígito sim, outro não, subtrai 9 dos dobros maiores que 9 e soma tudo. O número é válido se a soma for múltipla de 10. Isso detecta qualquer dígito trocado e quase todas as inversões de dois dígitos vizinhos.

A bandeira vem dos primeiros dígitos: 4 é Visa, 51 a 55 e 2221 a 2720 são Mastercard, 34 e 37 são American Express, 606282 é Hipercard, e assim por diante. As faixas da Elo são muitas e mudam, por isso ela aparece como não identificada.

Passar no Luhn não quer dizer que o cartão existe, está ativo ou tem limite. Isso só a operadora responde, quando o pagamento é autorizado.

## Em código

Para validar o número do cartão em código, aplique o algoritmo de Luhn e confira o tamanho. A bandeira e a existência do cartão ficam com o gateway de pagamento.

```javascript
// Algoritmo de Luhn: da direita para a esquerda, dobra um dígito sim, outro não
function luhnConfere(digitos) {
  let soma = 0;
  for (let i = 0; i < digitos.length; i++) {
    let n = Number(digitos[digitos.length - 1 - i]);
    if (i % 2 === 1) {
      n *= 2;
      if (n > 9) n -= 9; // 7 × 2 = 14, e 1 + 4 = 5 (o mesmo que 14 - 9)
    }
    soma += n;
  }
  return soma % 10 === 0;
}

// Cartão: de 12 a 19 dígitos e o Luhn conferindo
function cartaoValido(numero) {
  const d = numero.replace(/\D/g, '');
  return d.length >= 12 && d.length <= 19 && luhnConfere(d);
}

// Dígito que completa um número para passar no Luhn (útil para gerar dados de teste)
function digitoLuhn(base) {
  for (let dv = 0; dv <= 9; dv++) {
    if (luhnConfere(`${base}${dv}`)) return dv;
  }
}
```

_JavaScript_

```python
import re


def luhn_confere(digitos: str) -> bool:
    soma = 0
    for i, c in enumerate(reversed(digitos)):
        n = int(c)
        if i % 2 == 1:
            n = n * 2 - 9 if n * 2 > 9 else n * 2
        soma += n
    return soma % 10 == 0


def cartao_valido(numero: str) -> bool:
    d = re.sub(r"\D", "", numero)
    return 12 <= len(d) <= 19 and luhn_confere(d)
```

_Python_

```php
<?php
function luhnConfere(string $digitos): bool
{
    $soma = 0;
    foreach (str_split(strrev($digitos)) as $i => $c) {
        $n = (int) $c;
        if ($i % 2 === 1) {
            $n = $n * 2 > 9 ? $n * 2 - 9 : $n * 2;
        }
        $soma += $n;
    }
    return $soma % 10 === 0;
}

function cartaoValido(string $numero): bool
{
    $d = preg_replace('/\D/', '', $numero);
    return strlen($d) >= 12 && strlen($d) <= 19 && luhnConfere($d);
}
```

_PHP_

## Perguntas frequentes

### O validador diz se o cartão tem limite?

Não. Ele só confere o formato e o dígito verificador. Se o cartão existe, está ativo ou tem limite, só a operadora responde, na autorização do pagamento.

### É seguro digitar o número do cartão aqui?

O número não sai do seu navegador. Mesmo assim, evite colar cartões reais em qualquer site: para testes, use números fictícios ou os cartões de teste do seu gateway.

### Como saber a bandeira pelo número do cartão?

Pelos primeiros dígitos: 4 é Visa, 51 a 55 ou 2221 a 2720 é Mastercard, 34 ou 37 é American Express e 606282 é Hipercard. O validador mostra a bandeira ao conferir o número.

## Guias

- [Como validar número de cartão de crédito (algoritmo de Luhn)](https://pradev.com.br/guias/como-validar-cartao-de-credito-luhn): Como funciona o algoritmo de Luhn, o dígito verificador dos cartões, e como validar número de cartão em JavaScript, Python e PHP sem guardar dados sensíveis.

## Ferramentas relacionadas

- [Gerador de Cartão de Crédito](https://pradev.com.br/gerador-de-cartao-de-credito): Gere números de cartão de crédito fictícios, válidos no algoritmo de Luhn, com validade e CVV, para testar formulários. Não funcionam para compras.
- [Validador de CPF](https://pradev.com.br/validador-de-cpf): Confira se um CPF é válido pelo cálculo dos dígitos verificadores. Grátis, sem cadastro, e o número não sai do seu navegador.
- [Gerador de Pessoas](https://pradev.com.br/gerador-de-pessoas): Gere pessoas fictícias com nome, CPF válido, nascimento, e-mail, celular e endereço para testar sistemas. Exporta JSON e CSV. Grátis, no navegador.
- [Gerador de QR Code PIX](https://pradev.com.br/gerador-de-qr-code-pix): Gere o QR Code Pix e o código copia e cola com valor, para receber pagamentos ou testar integrações. Leia também um código Pix. Grátis.
- [Validador de Boleto](https://pradev.com.br/validador-de-boleto): Confira se a linha digitável ou o código de barras de um boleto está correto e veja o banco, o valor e o vencimento. Boletos e contas de consumo.
- [Gerador de Chave PIX](https://pradev.com.br/gerador-de-chave-pix): Gere chaves Pix fictícias para testes de software: chave aleatória, CPF, CNPJ, e-mail e celular, no formato certo e com dígitos válidos.
