Cartão de pagamento

Números de cartão de crédito ou débito, só pelo algoritmo de Luhn.

  • Matriz de paridade

Validar

Valida um número de cartão de pagamento (crédito ou débito): de 12 a 19 dígitos e um dígito verificador de Luhn.

  • A função não detecta a bandeira, não consulta a faixa do emissor e não verifica a validade nem o CVV.
  • A função rejeita um número com todos os dígitos iguais, mesmo que ele passe no Luhn.
  • Aceita uma string ou um número. Os caracteres de máscara (espaço em branco, ., - e /, o conjunto que o CPF e o CNPJ aceitam) ficam entre dois dígitos quaisquer, inclusive uma sequência deles (4111 - 1111 - 1111 - 1111), porque o agrupamento impresso muda com a bandeira (4-4-4-4, 4-6-5, 4-6-4). Espaços nas pontas são ignorados.
  • Qualquer outro caractere torna o número inválido, em vez de ser descartado: letras (4111a1111b1111c1111), ,, _, parênteses, ou um caractere de máscara que não está entre dois dígitos (um - no início, um . no fim).
  • Um número só é aceito se for um inteiro seguro não negativo. Um número acima de 2^53 - 1 já foi arredondado ao chegar, e um negativo ou fracionário não é um número de cartão, então passe um número mais longo como string.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaboolean

Valida um número de cartão de pagamento (crédito ou débito) com o algoritmo de Luhn. Só a quantidade de dígitos (12 a 19) e o dígito verificador de Luhn são conferidos. Não há detecção de bandeira (Visa, Mastercard, Amex...), consulta de faixa de emissor nem validação de validade/CVV.

  • Aceita uma string ou um número, com os caracteres de máscara (espaço em branco, ., - e /) em qualquer posição entre os dígitos.
import { isValidCreditCard } from '@brazilian-utils/brazilian-utils';

isValidCreditCard('4111111111111111'); // true (número de teste Visa)
isValidCreditCard('5555555555554444'); // true (número de teste Mastercard)
isValidCreditCard('378282246310005'); // true (número de teste American Express)
isValidCreditCard('4111 1111 1111 1111'); // true (máscara com espaços)
isValidCreditCard('4111 - 1111 - 1111 - 1111'); // true (uma sequência de separadores entre os dígitos)
isValidCreditCard('4111.1111/1111-1111'); // true (qualquer um dos caracteres de máscara)
isValidCreditCard('4111111111111112'); // false (dígito verificador inválido)
isValidCreditCard('0000000000000000'); // false (todos os dígitos iguais, ainda que o Luhn feche)
isValidCreditCard('4111a1111b1111c1111'); // false (letras entre os dígitos)
isValidCreditCard(4111111111111111111); // false (acima de 2^53 - 1, passe como string)

Fonte: ISO/IEC 7812-1.

Código: brazilian-utils/javascript
Teste com JavaScript isValidCreditCard
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (42) e o resultado em cada biblioteca creditCard.isValid

Fontes oficiais

Atualizado em

Nesta página