"Enter"a basıp içeriğe geçin

C Programlama Örnek Vize Sorusu #9

Problem :Luhn algoritmasını yani kredi kartı doğrulama algoritmasını c programlama dilinde kodlayınız.

Luhn Algoritması Nasıl Çalışır ?

Hans Peter Luhn adlı bir bilim adamı tarafından bulunan bu algoritmayı bir örnekle açıklamaya çalışalım.Diyelim kredi kartı numaranız aşağıda ki gibi olsun.

3254 3298 2853 1293

  • Çift haneler yani 2-4-6-8-10-12-14-16.hanede ki sayılar toplanır.
  • Tek hanelerde ki sayılarsa ikiyle çarpılır.Ardından bu sayıların rakamları toplanır.

Kısaca yukarı da verdiğimiz örnek üzerinden yapmak gerekirse

  • Önce çift haneleri toplayalım.

2+4+2+8+8+3+2+3 = 32

  • Tek hanede ki rakamları 2’ye çarparak sonuç olarak çıkan sayıların tekrardan rakamlarını toplayalım.

3×2 = 6         5×2 = 10          3×2= 6       9×2 = 18     2×2 = 4     5×2 = 10     1×2 = 2       9×2 = 18

Şimdi bu sayıların rakamlarını toplayalım.

6 + 1 + 0 + 6 + 1 + 8 + 4 + 1 + 0 + 2 + 1 + 8 = 38

Çift hanede ki rakamlara uygulanan işlem sonrası sonuç = 32

Tek hanede ki rakamlara uygulanan işlem sonrası sonuç = 38

  • Çift ve tek hanelere uygulanan işlem sonucu elde ettiğimiz 2 farklı sayıyı toplayıp 10’a göre mod alıyoruz.Eğer ki kalan sıfırsa yani 10’a tam bölünüyorsa kredi kartı numarası doğrudur.

32 + 38 = x(mod10)     x 0’a eşit olduğundan görüldüğü gibi bu kredi kartı numarası doğrudur.

#include <stdio.h>
#include <conio.h>
int main ()
{
	int kartno[16],i,cifttop=0,tektop=0;
	printf("Kartinizin on yuzunde bulunan 16 haneli kart numaranizi girin: \n");
	for(i=0;i<16;++i)
	{
		printf("16 Haneli Kart Numaranizin %d.hanesini girin: ",i+1);
		scanf("%d",&kartno[i]);
	}
	for(i=0;i<16;++i)
	{
		if(i%2==0)
		{
			cifttop += kartno[i];
		}
		else
			tektop += (kartno[i]*2); 
	}
	if(cifttop+tektop % 10 == 0)
	{
		printf("Kart numaraniz dogrudur.");
	}
	else
		printf("Kart numaraniz yanlistir.");
	getch ();
	return 0;
}

Bir sonraki C Programlama sorusunu görmek ve incelemek için buraya tıklayınız.

Please follow and like us:
RSS
Follow by Email
Facebook
Twitter
Tarafımızca Değerlendirildi.

İlk Yorumu Siz Yapın

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    This site uses Akismet to reduce spam. Learn how your comment data is processed.