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 = 3ou16 → 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: 0
