A validação do número de um cartão de crédito geralmente é feita usando o Algoritmo de Luhn. Esse algoritmo é um método de verificação simples para detectar erros de digitação em números de cartões.
O Algoritmo de Luhn é um método de verificação de soma de verificação (checksum) usado para validar números de identificação, como cartões de crédito, IMEI de celulares e outros números sequenciais. Foi inventado por Hans Peter Luhn, um cientista da IBM, em 1954.
Passos do Algoritmo de Luhn
- Remova espaços e caracteres não numéricos do número do cartão.
- Comece da direita para a esquerda:
- Dobre o valor de cada segundo dígito.
- Se o resultado da multiplicação for maior que 9, some os dígitos do resultado (exemplo: 8×2=16⇒1+6=7).
- Some todos os números (os dobrados e os não dobrados).
- Verifique se a soma total é múltiplo de 10.
- Se for, o número é válido.
- Caso contrário, é inválido.
Exemplo de Validação
Suponha que o número do cartão seja “4539 1488 0343 6467”.
Remover espaços: 4539148803436467
Separar dígitos e dobrar os alternados:
Número original: 4 5 3 9 1 4 8 8 0 3 4 3 6 4 6 7
Dobrar os pares: 8 5 6 9 2 4 16 8 0 3 8 3 12 4 12 7
Somar os dígitos:
- Para números com dois dígitos, somamos os algarismos (ou subtraia 9 deste valor que gera o mesmo resultado:
16 → 1+6 = 7
,12 → 1+2 = 3
,12 → 1+2 = 3
ou16 → 16-9 = 7
,12 → 12-9 = 3
,12 → 12-9 = 3
- Soma total:
(8 + 5 + 6 + 9 + 2 + 4 + 7 + 8 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7) = 70
Divisível por 10?
70 % 10 == 0
-> Número válido!
Aqui está um código para validar um número de cartão usando o Algoritmo de Luhn:
using System; using System.Linq; class Program { static void Main() { Console.Write("Digite o número do cartão: "); string numeroCartao = Console.ReadLine().Replace(" ", "").Replace("-", ""); if (EhValidoLuhn(numeroCartao)) Console.WriteLine("Cartão válido!"); else Console.WriteLine("Cartão inválido."); } static bool EhValidoLuhn(string numero) { if (!numero.All(char.IsDigit)) return false; int soma = 0; bool dobrar = false; for (int i = numero.Length - 1; i >= 0; i--) { int digito = numero[i] - '0'; if (dobrar) { digito *= 2; if (digito > 9) digito -= 9; } soma += digito; dobrar = !dobrar; } return soma % 10 == 0; } }
Views: 8