Validação de Número de Cartão de Crédito

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
  1. Remova espaços e caracteres não numéricos do número do cartão.
  2. 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).
  3. 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  ou
16 → 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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima