Luhn Algoritması 16 haneli kredi kartı numaralarının kontrolü için Hans Luhn tarafından geliştirilmiş bir algoritmadır.
Algoritmanın adımları şu şekildedir:
1. Sağdan sola çift pozisyondaki haneleri 2 ile çarp.
2. Çarpım sonucu değeri 10'u aşmayan sayıların kendisini 10'u aşan sayıların ise birler ve onlar basamağının toplamını yaz.
3. Yazdığın sayıları kendi aralarında topla.
4. Bu toplama tek pozisyondaki hanelerin toplamını ekle.
5. Sonuç 10'a tam bölünüyorsa kart geçerli bölünmmüyorsa geçersizdir.
Şimdi bu algoritmayı c dilinde uygulayalım.
Öncelikle kullanıcıdan kart numarasını alalım.long long credit_number;
printf("Enter the credit card number: ");
scanf("%lld", &credit_number);
Şimdi numarayı sağdan sola bir diziye aktaralım.
int nums[16] = {0}, count = 0;
while (credit_number > 0)
{
nums[count] = credit_number % 10;
credit_number /= 10;
count++;
}
Şimdi sadece çift pozisyondaki değerleri okuyup 2 ile çarpalım.
for (int i = 0; i < count; i++)
{
if(i % 2 == 1)
{
nums[i] *= 2;
if (nums[i] > 9)
{
nums[i] = nums[i] % 10 + nums[i] / 10;
}
}
}
En son genel toplamı kontrol edelim.int sum = 0;
for (int i = 0; i < count; i++)
{
sum += nums[i];
}
if (sum % 10 == 0)
{
printf("VALID\n");
}
else
{
printf("INVALID\n");
}
Kodumuzun tamamı: