Vous êtes sur la page 1sur 3

24.10.08

O Algoritmo de Luhn foi criado por Hans Peter Luhn (1896-1964), cientista da computação

que trabalhou na IBM. O objetivo deste algoritmo é criar um dígito de verificação para uma

números.

sequência

de

um dígito de verificação para uma números. sequência de O maior uso do algoritmo de Luhn

O

maior uso do algoritmo de Luhn é com cartões de crédito, onde as operadoras geram os n

-

1 dígitos iniciais (da esquerda para a direita de quem os lê) e o enésimo digíto é calculado

de

acordo

com

os

anteriores.

O

método para realização do cálculo não é muito difícil:

 

1.

Tome uma sequência de números inteiros positivos (inclusive o dígito verificador) e a inverta.

2.

Adicione o primeiro número (dígito de verificação) ao somatório geral, que deve iniciar com zero.

3.

Multiplique o segundo número por 2 e execute a operação "noves fora", adicionando o

resultado ao somatório.

4.

Repita os passos 2 e 3 até o final da sequência, ou seja, ora adicionando diretamente o número ao somatório, ora multiplicando-o por 2, realizando "noves fora" e adicionando ao

somatório.

5.

Ao final, verifique se o somatório é divisível por 10. Se for, o número é válido. Senão, é

inválido.

Tudo isso é muito sexy, mas até então conseguimos apenas validar um número. Como podemos

verificador?

gerar

um

dígito

Bom, para os que gostam de desafio, aí está um. Se conseguir, poste aqui a sua solução ou um

link

mesma.

para

a

Se você não está com tempo ou vontade para fazer isso, eis a minha solução (baseada em várias outras que andei lendo):

1. Tome uma sequência de inteiros positivos e a inverta.

2. Multiplique a primeira posição por 2 e faça os "nove fora", adicionando o resultado ao somatório, que deve iniciar com 0.

3. Adicione a segunda posição ao somatório.

4. Repita os passos 2 e 3, para, ora multiplicar, fazer os "nove fora" e adicionar o resultado ao

somatório, ora adicionar o resultado diretamente.

5. Se o resultado do somatório for múltiplo de 10, o dígito verificador será 0. Senão, deve-se saber quantos dígitos faltam para completar 10, então o dígito verificador será 10 - (resto da divisão do somatório por 10).

Mas por que aquelas contas no passo 5? Acontece que, como descrito no último passo do algoritmo de Luhn, um número válido deve ter o resultado do somatório igual a um múltiplo de 10. Então, se o resultado do somatório encontrado for múltiplo de 10, este não deve ser alterado. Logo, adicionamos 0. Caso contrário, precisamos fazer com que este resultado seja múltiplo de 10, então adicionamos quanto falta para chegar a 10, como forma de "completar" o número

:D

obtido.

Eu ia postar o código que fiz em Python, mas vou deixar de lição de casa para os leitores. Porém, para ajudar, eis uma série de números com seus respectivos dígitos verificadores, obtidos a partir da aplicação do algoritmo de Luhn. Assim cada um pode testar sua implementação:

Nota: O comprimento da sequência não importa para o algoritmo.

11111-2

12345-5

1123581321-6

98765432-4

14061970-1

Agora um bônus: este link leva a uma página do PayPal com vários números de cartão de crédito

(os

validação.

mesmos

da

tabela

abaixo),

para

testes

de

Nota: Não se esqueça de ignorar o último dígito dos números, pois ele é o dígito verificador a ser calculado.

Tipo do Cartão de Crédito Número do Cartão

American Express

378282246310005

American Express

371449635398431

American Express Corporate378734493671000

Australian BankCard

5610591081018250

Diners Club

30569309025904

Diners Club

38520000023237

Discover

6011111111111117

Discover

6011000990139424

JCB

3530111333300000

JCB

3566002020360505

MasterCard

5555555555554444

MasterCard

5105105105105100

Visa

4111111111111111

Visa

4012888888881881

Visa

4222222222222

Para completar os desafios desta postagem, há um erro proposital nela (não compromete o entendimento!). Será que alguém consegue descobrir? Comente! ;)