Ir para o conteúdo
OneKitly

Números de cartão de teste: para que serve realmente o algoritmo de Luhn e o que não lhe pode dizer

Publicado a 05/08/2026 · 16 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na OneKitly

Desempenho web · Formatos de ficheiro

Verificado a partir de 4 fontes

Ver perfil
Em resumo

A fórmula de Luhn é um esquema de dígito de controlo para o qual Hans Peter Luhn apresentou uma patente em janeiro de 1954, concedida em agosto de 1960 como US 2 950 048 com o título Computer for Verifying Numbers, e adotada desde então como dígito de controlo do sistema de numeração de cartões normalizado na ISO/IEC 7812-1. Trabalha a partir da direita: duplique um dígito em cada dois, subtraia nove a todo o resultado superior a nove, some tudo, e um número válido dá um total divisível por dez. Em 4242 4242 4242 4242 os oito 4 passam cada um a 8 e os oito 2 ficam, o que dá 64 mais 16, ou seja 80 — divisível por dez, o número passa. É esse todo o algoritmo e toda a garantia. Esgotar os casos mostra exatamente o que lhe compra: as 144 substituições de um dígito nesse número são todas detetadas, e a troca de dois dígitos vizinhos é detetada em 88 dos 90 casos possíveis, sendo as duas exceções 09 contra 90. Também lhe escapam os erros gémeos 22 contra 55, 33 contra 66 e 44 contra 77. É uma verificação de escrita, nada mais. Não é uma medida de segurança, não pode ser, e um número que a passe não diz nada sobre se existe uma conta, se tem fundos ou se seria autorizada — só o emissor o sabe, e só quando o seu prestador lho pergunta durante a autorização. Executar a saída deste gerador confirma a mecânica: 120 000 números em seis marcas, todos válidos segundo Luhn, com comprimentos corretos e códigos de segurança da largura certa. O que isso lhe compra é poder exercitar a validação do lado do cliente do seu formulário. Para testar mesmo uma integração de pagamentos, use os números que o seu prestador documenta — a Stripe, a Adyen e o PayPal publicam cada um os seus, desenhados para disparar códigos de recusa concretos. Um número gerado a começar por 4242 não é o 4242 4242 4242 4242 da Stripe, e não lhe vai ensinar nada.

Luhn é uma soma de verificação para apanhar gralhas, patenteada em 1960, e é esse todo o seu trabalho. Um número que a passa não lhe diz nada sobre conta nenhuma. Para testar uma integração de pagamentos precisa dos números publicados pelo seu prestador, não de um gerado.

O algoritmo, desenrolado para que o possa verificar à mão

Comece pelo algarismo mais à direita, que é o dígito de controlo, e deixe-o em paz. Vá para a esquerda e duplique um algarismo em cada dois — o imediatamente à esquerda do de controlo, e depois um sim outro não. Sempre que a duplicação der mais do que nove, subtraia nove, o que é o mesmo que somar os dois algarismos do valor duplicado. Agora some todos os algarismos do número, duplicados ou não. Se o total for divisível por dez, o número passa.

Pegue em 4242 4242 4242 4242, o número de teste mais publicado do mundo. Dezasseis algarismos, portanto as posições a duplicar são a primeira, a terceira, a quinta e assim por diante a partir da esquerda — os oito 4. Cada 4 duplicado dá 8, que não passa de nove, logo nada é subtraído. Os oito 2 ficam intactos. A soma é oito vezes 8, ou seja 64, mais oito vezes 2, ou seja 16, dando 80. Oitenta a dividir por dez dá oito sem resto, logo o número é válido. Um segundo exemplo com algarismos variados, caso a repetição esconda o método: 4539 1488 0343 6467 dá a série 8, 5, 6, 9, 2, 4, 7, 8, 0, 3, 8, 3, 3, 4, 3, 7, cujo total é também 80.

Produzir um número válido em vez de verificar um é a mesma aritmética ao contrário. Pegue nos algarismos que quer sem o último, calcule a soma como acima tratando a posição em falta como o dígito de controlo, e o dígito de controlo é o que leva o total ao múltiplo de dez seguinte. Para 424242424242424 a resposta é 2. Para 37828224631000, um corpo Amex de catorze algarismos, é 5, e daí que 378282246310005 seja o número de teste Amex publicado. É tudo o que um gerador faz.

O que apanha, esgotando os casos

O que se costuma afirmar sobre Luhn é que apanha todos os erros de um algarismo e quase todas as transposições de algarismos vizinhos. Ambas as metades se verificam por esgotamento em vez de se acreditarem. Mude um algarismo de 4242 4242 4242 4242 para cada um dos outros nove valores, em cada uma das dezasseis posições: os 144 números resultantes falham todos a verificação. Essa parte é completa: qualquer algarismo mal escrito é apanhado, sempre.

A metade das transposições é quase completa e a exceção é precisa. Construa um número válido a terminar em cada um dos noventa pares ordenados de algarismos diferentes, troque esses dois algarismos e volte a verificar: oitenta e oito das noventa trocas partem a soma de verificação. As duas que sobrevivem são 09 a tornar-se 90 e 90 a tornar-se 09. A razão é aritmética e não misteriosa: duplicar 0 dá 0 e duplicar 9 dá 18, que se reduz a 9, portanto esses dois algarismos contribuem o mesmo em qualquer posição, e trocá-los não muda nada. Há um segundo ponto cego, menos citado, na mesma família: os erros gémeos, quando um par duplicado é escrito em vez de outro par duplicado. Escrever 55 por 22, 66 por 33 ou 77 por 44 deixa o total inalterado e passa.

Em contrapartida, repare no que a verificação não tenta. Não tem segredo, nem chave, nem estado. Qualquer um calcula um número válido num segundo, e os noventa por cento de cadeias de dezasseis algarismos que falham a verificação são a única coisa que exclui. É o desenho certo para aquilo a que serve: apanhar um cliente que escreveu mal um algarismo do seu próprio cartão, antes de gastar uma ida e volta de rede e uma comissão a descobri-lo. Nunca pretendeu estabelecer que um cartão existe, e não se lhe pode fazer fazer isso.

O número, a conta e a autorização são três coisas diferentes

Um número de cartão tem estrutura. Os primeiros algarismos são o identificador do emissor, que designa a rede e a instituição e é atribuído ao abrigo da ISO/IEC 7812-1; os algarismos seguintes são o identificador de conta que o emissor atribuiu; o último é o dígito de controlo. Estrutura é tudo o que é. Saber que um número começa por um prefixo de emissor válido e acaba num dígito de controlo correto diz-lhe que a cadeia está bem formada, tal como um código postal bem escrito não diz nada sobre se existe ali uma casa.

Se há uma conta por trás do número, se está aberta, se tem margem para o montante, se as regras de risco do próprio emissor vão permitir este comerciante nesse dia — nada disso está nos algarismos. Responde-lhe um pedido de autorização: o seu prestador envia os dados à rede, a rede encaminha-os para o emissor, e o emissor responde com uma aprovação ou um código de recusa. Essa ida e volta é a única coisa que sabe. É também a única coisa que pode recusar por fundos insuficientes, por cartão declarado perdido, ou porque o código de segurança não coincidiu — ou seja, exatamente o leque de resultados que o seu processo de pagamento tem de tratar bem.

É por isso que os prestadores publicam números de teste em vez de lhe dizerem para gerar os seus. A Stripe documenta um número concreto por marca e um conjunto adicional que produz falhas com nome, de modo a poder escrever um teste que afirme que a sua página mostra a mensagem certa quando um cartão é recusado por fundos insuficientes e não por código de segurança errado. A Adyen publica a sua própria lista e diz claramente que esses números só funcionam com a sua plataforma de teste e não funcionam noutras. O PayPal publica dados de cartão para a sua sandbox. Cada lista está ligada ao ambiente de teste de um prestador, e existe porque o que é útil testar não é se uma cadeia se parece com um cartão, mas se o seu código trata o que volta.

O que este gerador produz, confrontado com as gamas publicadas

A mecânica é sólida. Vinte mil números por marca em seis marcas, 120 000 ao todo, e todos passam a verificação de Luhn: nem uma única falha, repetida após cada alteração às gamas. Cada prefixo produzido cai dentro de uma gama que a rede publica mesmo. Os comprimentos seguem a marca: dezasseis algarismos para Mastercard, Discover e JCB, quinze para American Express, catorze para a gama Diners que usa, e Visa com dezasseis algarismos nove vezes em dez, com treze e dezanove uma vez em vinte cada, porque a Visa emite os três e um formulário que só aceita dezasseis tem um defeito que nenhum dado de teste uniforme lhe mostrará. As larguras do código de segurança também estão certas: três algarismos em todo o lado exceto American Express, onde são quatro.

A Mastercard é a gama que vale a pena perceber, pela forma como é sorteada mais do que por alguma coisa que lhe falte. A rede foi 51 a 55 durante décadas; desde 2017 emite também na série 2, um intervalo que vai de 222100 a 272099 e que os comerciantes tiveram de aceitar a partir de meados de 2017. Uma lista plana de prefixos não consegue exprimir isso — são quinhentos mil prefixos de seis algarismos —, por isso cada gama é guardada como um intervalo numérico inclusivo e o prefixo é tirado lá de dentro. As duas gamas são sorteadas em partes iguais, metade e metade, e isso é uma decisão de dados de teste, não um retrato do mercado. Ponderada pelos cartões em circulação, a série 2 seria uma pequena percentagem, e com a definição por omissão de cinco cartões um programador nunca veria uma: precisamente o defeito a evitar. Vinte mil Mastercard geradas repartem-se 49,7 contra 50,3 entre as duas. Se o seu padrão de validação foi escrito antes de 2017, ou a partir da saída de um gerador em vez das gamas publicadas pela rede, rejeita um cartão real da série 2 e fica a saber quando um cliente lho disser.

Um prefixo personalizado já não se sobrepõe à marca, porque a marca deixou de ser tirada do seletor: é lida nos algarismos. Escreva 51 e obtém uma Mastercard, diga o que disser o seletor de tipo. Escreva um simples 9, um primeiro algarismo que a ISO/IEC 7812-1 reserva à atribuição nacional e que não pertence a rede nenhuma, e o cartão volta rotulado como BIN desconhecido sobre uma face cinzenta neutra, e não disfarçado de Visa. Um prefixo curto só reclama uma gama quando todos os números que poderia produzir caem lá dentro: 51 é uma Mastercard, um 5 sozinho não, porque 50 e 56 a 59 não são — por isso um BIN escrito a meio lê-se como desconhecido, que é a resposta honesta enquanto o campo ainda está a ser preenchido. A marca lida nos algarismos comanda depois o resto do cartão: o comprimento e a largura do código de segurança seguem o prefixo e não a lista, de modo que um BIN Amex escrito à mão dá quinze algarismos e um código de quatro. A lista pendente de prefixos já feitos nunca teve este problema: escolher um fixa a marca em conformidade.

Mais uma coisa sobre a lista pendente de prefixos, que é a parte mais útil da ferramenta e também a mais fácil de ler mal. Os onze prefixos oferecidos — 4242, 4000, 5555, 5200, 3782, 6011, 3566, 3622, 4111, 5100 e 4032 — são os primeiros algarismos dos números que os prestadores publicam como dados de teste, não os de bancos reais, e a página di-lo. Mas um número gerado que comece por 4242 não é o cartão de teste da Stripe. O cartão de teste da Stripe é exatamente 4242 4242 4242 4242, uma cadeia concreta; o gerador produz outro número, aleatório, válido por Luhn, com os mesmos quatro primeiros algarismos, e o ambiente de testes de um prestador reconhece o número documentado e não o prefixo. Um prefixo escolhido fixa também o comprimento no canónico da marca: um 4242 volta sempre com dezasseis algarismos e nunca nas formas mais raras da Visa de treze ou dezanove. Use a lista para que os seus dados pareçam verosímeis. Use a documentação do prestador para que funcionem.

Cada marca que o gerador oferece, e as gamas publicadas de onde tira
MarcaO que a ferramenta geraO que a rede emite
VisaPrefixo 4; 16 algarismos em 90 % dos casos, 13 e 19 a 5 % cada, código de 3 algarismosPrefixo 4; 16 algarismos é a norma, 13 e 19 também existem
Mastercard51 a 55 e 222100 a 272099, sorteados metade e metade51 a 55 e a série 2, 222100 a 272099, em vigor desde 2017
American Express34 e 37, 15 algarismos, código de 434 e 37, 15 algarismos, código de 4 — completo e correto
Discover6011, 65, 644 a 649 e 622126 a 622925, ponderados 40/30/20/106011 e 65, mais as faixas 644 a 649 e 622126 a 622925
JCBQualquer prefixo de 3528 a 3589Toda a gama 3528 a 3589
Diners Club36, 300 a 305, 38 e 39, sempre 14 algarismos36, 38 a 39 e a faixa 300 a 305; também circulam formas de 16 algarismos
Gerador de cartões de teste aleatóriosGere números de cartão de teste válidos por Luhn (Visa, Mastercard, Amex…) com validade e CVV — apenas para testes.Experimentar a ferramenta

Perguntas frequentes

Um número que passa a verificação de Luhn significa que o cartão é real?
Não, nem de longe. Luhn é uma soma de verificação sem chave nem segredo: qualquer um calcula um número válido em menos de um segundo, e cerca de uma cadeia de dezasseis algarismos em cada dez passa por acaso. O que exclui são as nove em cada dez que não passam — um filtro de gralhas e mais nada. Se existe uma conta por trás do número, se está aberta e se autorizaria um dado montante são perguntas que só o emissor pode responder, através de um pedido de autorização encaminhado pelo seu prestador de pagamentos. É por isso que a verificação se faz no navegador antes de enviar o pedido, e não em vez dele.
Posso usar um número gerado para testar a minha integração de pagamentos?
Para a metade do lado do cliente, sim: um número bem formado, com o comprimento certo e um dígito de controlo válido, é exatamente o que precisa para ver se o seu formulário o aceita, o agrupa de quatro em quatro, mostra o ícone de marca correto e pede três algarismos em vez de quatro. Para tudo o que vem depois, não. O ambiente de teste de um prestador reconhece os números concretos que publica, e um número aleatório que partilhe os quatro primeiros algarismos com um deles não é um deles. A Stripe, a Adyen e o PayPal documentam cada um uma lista, e a parte útil dessas listas são os números que falham de propósito — um por fundos insuficientes, um por cartão perdido, um por código de segurança que não coincide — porque tratar bem uma recusa é a parte de um processo de pagamento que parte mesmo.
Que transposições escapam ao Luhn?
Exatamente um par vizinho: 09 escrito 90, e 90 escrito 09. Teste os noventa pares ordenados de algarismos diferentes e oitenta e oito das trocas são apanhadas. A exceção sai da aritmética: duplicar 0 dá 0 e duplicar 9 dá 18, que se reduz a 9, portanto o par contribui com 9 em qualquer ordem. Há um segundo ponto cego, menos citado, de outra família: os erros gémeos, quando um par duplicado é escrito em vez de outro par duplicado. Introduzir 55 em vez de 22, 66 em vez de 33 ou 77 em vez de 44 deixa a soma inalterada e passa. São dois limites conhecidos de um método concebido nos anos cinquenta para apanhar um algarismo copiado à mão, e ambos são alheios à segurança, porque o Luhn nunca foi um controlo de segurança.
Porque é que a minha validação rejeita um Mastercard real que começa por 2?
Porque a regra foi escrita contra a faixa antiga. A Mastercard foi 51 a 55 durante décadas, e muitíssimos padrões de validação ainda o dizem. A rede acrescentou a série 2 em 2017, uma faixa que vai de 222100 a 272099, e os comerciantes tiveram de a aceitar. Um padrão anterior herda o buraco, e também o herda um derivado de um gerador que só emitia 51 a 55 — que era o que este fazia. Agora sorteia as duas faixas em igual medida, por isso a sua saída cobre ambas; mas escreva o padrão contra as gamas publicadas pela rede e não contra gerador nenhum, e trate a deteção de marca por prefixo como manutenção e não como trabalho de uma só vez, porque as gamas mudam.
É legal gerar números de cartão?
Calcular um dígito de controlo é aritmética, e a aritmética por si só não é a questão. O que importa é para que serve o número. Construir um conjunto de teste para exercitar um formulário é trabalho de software vulgar; tentar obter bens ou serviços com um número que ninguém lhe emitiu é fraude, em toda a parte, independentemente de satisfazer uma soma de verificação. Aqui não há meio-termo útil, porque um número gerado não pode comprar nada de qualquer forma: não há conta por trás e nenhum emissor o autorizará. O conselho prático coincide com o técnico: use os números de teste publicados pelo seu prestador, guarde-os na sua bateria de testes, e nunca ponha um número de cartão real num ambiente de desenvolvimento, assunto sobre o qual o seu contrato com esse prestador e a norma de segurança de dados do setor têm muito a dizer.

Artigos que podem interessar-lhe

Todos os guias
GuiaDados de teste sem pessoas reais: porque é que o pseudonimizado continua pessoal e o sintético nãoTrocar nomes por identificadores não tira uma base de dados do RGPD — o artigo 4.º, n.º 5, e o considerando 26 dizem-no diretamente. Dados genuinamente sintéticos ficam fora do Regulamento por completo. Só essa distinção decide como alimenta um ambiente de pré-produção.GuiaQuadros de torneio: byes, cabeças de série e porque os números têm de ser potências de doisUm quadro de eliminação direta reduz a metade o seu plantel a cada ronda, portanto só fecha numa potência de dois. O número de byes, o de rondas, a ordem das cabeças de série e o total de jogos decorrem todos desse único facto — e cada um cabe numa linha.TutorialComo sortear um nome sem que ninguém duvide do resultadoUm sorteio justo precisa de mais do que um número aleatório: equiprobabilidade, nenhum método enviesado e um resultado que outra pessoa possa verificar. Eis como fazer.GuiaDividir pessoas em grupos justos: aleatório e justo não são a mesma exigência23 pessoas não se dividem por quatro, e uma divisão uniformemente aleatória pode entregar a um grupo todos os jogadores fortes. Eis a aritmética do resto, o custo medido do puro acaso e a correção por estratos.ExplicaçãoProbabilidades das mãos de póquer, deduzidas em vez de memorizadasCada probabilidade de mão de póquer de cinco cartas é um argumento de contagem sobre 2 598 960 mãos, e cada um cabe numa linha. Aqui estão as nove, com a verificação que as prova: as contagens têm de somar exatamente C(52,5).ExplicaçãoBaralhar é mais difícil do que parece: um milhão de execuções do baralhamento de uma linhaO baralhamento que toda a gente escreve — ordenar com um comparador aleatório — é enviesado, e não pouco. Um milhão de execuções medidas mostram oito das vinte e quatro ordens a sair o dobro das vezes das outras dezasseis.

Ferramentas relacionadas

Este artigo é sobre testar um formulário de pagamento, e mais nada. Um número gerado não é um meio de pagamento: não há conta nenhuma por trás, nenhum emissor o autorizará, e tentar usá-lo para obter bens ou serviços é fraude em todas as jurisdições onde este site é publicado. Os números de cartão reais são dados regulados — a norma PCI DSS rege como são armazenados e manuseados, e o seu contrato com o prestador dirá mais. Nada aqui é aconselhamento jurídico, de segurança ou de conformidade: use os números de teste publicados pelo seu prestador e pergunte-lhe em caso de dúvida.

Fontes

Detetaste um erro neste artigo?