Uma expressão regular é uma sequência de caracteres que forma um padrão de pesquisa. As expressões regulares são usadas principalmente para pesquisar, validar e transformar textos ou strings.

Aprenda a validar números de cartão de crédito como Mastercard, Visa Card e American Express com expressões regulares.

Quando usar RegEx para validar um número de cartão de crédito?

Os serviços de terceiros cobram por cada tentativa de transação. Quer a transação seja bem-sucedida ou não, você precisa pagar as taxas. Nesses casos, você deseja recusar números de cartão de crédito claramente inválidos. Você pode validar rapidamente números de cartão de crédito usando expressões regulares.

Mas você não pode confiar totalmente na validação de expressão regular para seu recurso de pagamento. Os emissores de cartões alteram regularmente seus padrões de número de cartão (introduzindo novos padrões ou retirando os antigos), portanto, o método regex não é a solução mais robusta. Embora você possa tentar manter o controle dos padrões de cartas de uma fonte como Wikipédia que é frequentemente atualizado.

Você também pode usar regex para localizar rapidamente a marca do cartão que pode ser usada para exibir logotipos ou etiquetas.

As expressões regulares têm vários casos de uso prático. O comando grep do Linux é provavelmente o caso de uso prático mais comum de regex.

O código utilizado neste projeto está disponível em um Repositório GitHub e é gratuito para você usar sob a licença do MIT.

RegEx para validar o número Mastercard

Um número Mastercard é válido se satisfizer as seguintes condições:

  1. A string não deve conter nenhum caractere especial, alfabeto ou espaço em branco.
  2. O número de caracteres deve ser igual a 16.
  3. A string deve começar com um intervalo numérico de 2 dígitos (variando de 51 a 55) ou um intervalo numérico de 4 dígitos (variando de 2221 a 2720).
    • Se a string começar com um intervalo numérico de 2 dígitos (variando de 51 a 55), os próximos 14 dígitos devem ser um número entre 0 e 9.
    • Se a string começar com um intervalo numérico de 4 dígitos (variando de 2221 a 2720), os próximos 12 dígitos devem ser um número entre 0 e 9.

O seguinte regex satisfaz as condições acima e pode validar um número Mastercard:

^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$

Se você não se sentir confortável com a expressão acima, confira um guia para iniciantes sobre expressões regulares primeiro.

Você pode usar o regex acima para validar o número Mastercard em qualquer linguagem de programação. Veja como fazer isso em Python:

importar

defcheckMasterCardNo(nenhum cartão):
regex = "^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$"
r = re.compile (regex)

se (.procurar(r, nenhum cartão)):
imprimir("Válido")
outro:
imprimir("Inválido")

cartão1 = "5110762060017101"
checkMasterCardNo (cartão1)

cartão2 = "8632458236982734"
checkMasterCardNo (cartão2)

A execução deste código confirmará que o primeiro número é válido, mas o segundo não é:

RegEx para validar o número do cartão Visa

Um número de cartão Visa é válido se satisfizer as seguintes condições:

  1. A string não deve conter nenhum caractere especial, alfabeto ou espaço em branco.
  2. A string deve começar com 4.
  3. O número de caracteres deve ser igual a 13 ou 16. Os antigos cartões visa têm 13 caracteres e os novos têm 16 caracteres.
    • Se o número de caracteres for igual a 13, os últimos 12 dígitos devem ser um número entre 0 a 9.
    • Se o número de caracteres for igual a 16, os últimos 15 dígitos devem ser um número entre 0 a 9.

O seguinte regex satisfaz as condições acima e você pode usá-lo para validar um número de cartão Visa:

^4[0-9]{12}(?:[0-9]{3})?$

Abaixo está a abordagem do Python para validar um número de cartão Visa:

importar

defcheckVisaCardNo(nenhum cartão):
regex = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)

se (.procurar(r, nenhum cartão)):
imprimir("Válido")
outro:
imprimir("Inválido")

cartão1 = "4539890694174109"
checkVisaCardNo (cartão1)

cartão2 = "49237429498"
checkVisaCardNo (cartão2)

Novamente, a saída confirma que o primeiro número é válido enquanto o segundo é inválido:

RegEx para validar o número do cartão American Express

Um número de cartão American Express é válido se satisfizer as seguintes condições:

  1. A string não deve conter nenhum caractere especial, alfabeto ou espaço em branco.
  2. Este número de caracteres deve ser igual a 15.
  3. A string deve começar com 34 ou 37.
  4. Os últimos 13 dígitos devem ser um número entre 0 e 9.

O seguinte regex satisfaz as condições acima e você pode usá-lo para validar um número de cartão American Express:

^3[47][0-9]{13}$

Você pode validar um número de cartão American Express usando o seguinte código Python:

importar

defcheckAmericanExpressCardNo(nenhum cartão):
regex = "^3[47][0-9]{13}$"
r = re.compile (regex)

se (.procurar(r, nenhum cartão)):
imprimir("Válido")
outro:
imprimir("Inválido")

cartão1 = "372831730491196"
checkAmericanExpressCardNo (cartão1)

cartão2 = "84732593847743042"
checkAmericanExpressCardNo (card2)

Mais uma vez, a saída confirma que o primeiro número é válido, mas o segundo é inválido:

Aplicações de Expressões Regulares

Você pode usar alguns regex bastante simples para validar números comuns de cartão de crédito. RegEx é uma ferramenta poderosa que você pode usar para pré-processamento de dados, correspondência de padrões, extração de dados, análise léxica, processamento de linguagem natural, web scraping e muito mais. Você também pode usar expressões regulares no desenvolvimento da Web para lidar com a validação de formulários HTML.