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 — Programador front-end e redator de Tecnologia na OneKitly
Desempenho web · Formatos de ficheiro
Verificado a partir de 4 fontes
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.
| Marca | O que a ferramenta gera | O que a rede emite |
|---|---|---|
| Visa | Prefixo 4; 16 algarismos em 90 % dos casos, 13 e 19 a 5 % cada, código de 3 algarismos | Prefixo 4; 16 algarismos é a norma, 13 e 19 também existem |
| Mastercard | 51 a 55 e 222100 a 272099, sorteados metade e metade | 51 a 55 e a série 2, 222100 a 272099, em vigor desde 2017 |
| American Express | 34 e 37, 15 algarismos, código de 4 | 34 e 37, 15 algarismos, código de 4 — completo e correto |
| Discover | 6011, 65, 644 a 649 e 622126 a 622925, ponderados 40/30/20/10 | 6011 e 65, mais as faixas 644 a 649 e 622126 a 622925 |
| JCB | Qualquer prefixo de 3528 a 3589 | Toda a gama 3528 a 3589 |
| Diners Club | 36, 300 a 305, 38 e 39, sempre 14 algarismos | 36, 38 a 39 e a faixa 300 a 305; também circulam formas de 16 algarismos |
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 →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
- United States Patent and Trademark Office — US Patent 2,950,048, Computer for Verifying Numbers, Hans P. Luhn, filed 6 January 1954 and granted 23 August 1960 — describes the alternating substitution of doubled digits with an end-around carry and the appended check digit that makes the cross-addition come out to zero
- Stripe — Testing — Stripe's published test card numbers by brand (4242424242424242 for Visa, 5555555555554444 for Mastercard, 378282246310005 for American Express, 6011111111111117 for Discover, 3566002020360505 for JCB, 36227206271667 for a 14-digit Diners Club), plus the numbers that trigger specific declines such as insufficient funds, a lost card and an incorrect security code; Stripe's terms prohibit testing in live mode with real payment details
- Adyen — Test card numbers — Adyen's own list, including 4111 1111 1111 1111 and 4111 1111 4555 1142 for Visa and 5100 0600 0000 0002 for Mastercard, with the explicit statement that these test card numbers only work with Adyen's test platform and do not work on other platforms
- PayPal Developer — Card testing in the sandbox — the card details PayPal publishes for use against its sandbox environment, and the scenarios they are designed to reproduce
Detetaste um erro neste artigo?