PHP ile Luhn Algoritması (Kredi Kartı) Doğrulama

  16-01-2019 20:05 • Ana Sayfa > PHP

Merhaba! Ödeme sistemleri genellikle buna müsade eden yada direk bu amaca hizmet eden API’ler paylaşsa da; bazı durumlarda kendi ekranınızda kredi kartı onayına ihtiyaç duyabiliyorsunuz. Bugün, bir ön provizyon işlemi için lazım olan kredi kartı teyidine yarayan ve asıl mantığı Luhn algoritmasının basit bir decoderi olan fonksiyonu paylaşacağım.

Fonksiyon; tahmin üzerinde çalıştığı için yüksek seviye güvenlik gerektiren projelerde kullanılmaya uygun olmayabilir. Ayrıca test kartı gibi sanal pos firmalarının kartlarında da çalışmayabiliyor. En azından iyzico’nun test kartlarında çalışmadığını test ettim.

Ayrıca altta kodlarını paylaştığım fonksiyonda ilk olarak preg replace ile boşlukları temizledim. Zira bazı durumlarda boşluksuz kart yazılabiliyorken bazı durumlarda 0101 0101 0101 0101 şeklinde 4’lük halde paylaşılabiliyor. Yine amex testlerinde 18 karakter testi yaparken işinize yarayacaktır..

function isValid($num) {
	$num = preg_replace('/\s+/', '', $num);
	$num = preg_replace('/[^\d]/', '', $num);
	$sum = '';

	for ($i = strlen($num) - 1; $i >= 0; -- $i) {
		$sum .= $i & 1 ? $num[$i] : $num[$i] * 2;
	}

	return array_sum(str_split($sum)) % 10 === 0;
}

Yakın zamanda bu postu güncelleyerek kredi kartı ay/yıl ve CVC doğrulama işlemlerini de paylaşırım fakat şimdilik acil ihtiyacı olanlar mb_substr ile basitçe yapacaktır diye düşünüyorum. Araştırmakta fayda var.

Yazar: Tarık Menteşe (@tarikmentese)

2010'dan bu yana c#, PHP, Python ve JS uygulamaları geliştiriyorum. Mobil platformlar için Swift ve Java konusunda bilgi sahibiyim. Bootstrap, ionic ve Laravel frameworklerine aşinayım. Ekip çalışmasına yatkınım :)