C# İle Kredi Kartı Tipini Bulma
Merhaba Arkadaşlar,
Kısaca kredi kartlarının doğasını tanımlayacak olur isek; Kredi kartları 16 haneli bir sayı dizisinden oluşmaktadır ve anlamını sadece parçalara böldüğümüzde anlayabiliriz. Hadi kredi kartlarını aşağıda biraz daha yakından tanıyalım 🙂
- Kredi kartının ilk 6 hanesi hangi banka tarafından verildiğini belirten BIN (Bank Identification Number) kodunu yani prefixi temsil eder
- Kredi kartının ilk hanesi ödeme sistemini belirtir. Bu numara kartın Visa/Mastercard ‘mı kullandığını temsil eder. Birazdan bu madde ile ilgili ödeme sistemini (kredi kartı tipi) bulmak için bir fonksiyon sizlerle paylaşacağım
- İlk 6 hane sonrasında gelen 9 hane banka tarafından müşteriye verilen hesap numarasını oluşturur. Bu 9 hane, 0-9 arasındaki sayılar arasından oluşmaktadır. Bu da 10^9 kombinasyonu dolayısı ile banka başına 1 milyar olası toplam hesap numarası demektir
- Kredi kartının son numarası (0-9) güvenlik sayısını (check digit) temsil eder. Bu sayı ile “Luhn” veyahut “Mod 10” algoritmaları ile kredi kartının geçerli bir kredi kartı olup olmadığını anlayabiliriz
Yukarıda kısaca kredi kartı doğasından bahsettik ve şimdi sıra geldi kart tipini veyahut 2.maddede belirttiğimiz ödeme sistemini bulmak için kullanacağımız algoritmayı paylaşmaya…
Metodumuz içerisinde yer alacak olan Regex’ler dolayısı ile eklenecek kütüphanemizi aşağıda paylaşıyorum;
using System.Text.RegularExpressions;
Metodumuz aşağıdaki gibidir;
public static string KrediKartiniBulma(string KrediKartiNo)
{
Regex visaRegex = new Regex("^4[0-9]{12}(?:[0-9]{3})?$");
Regex masterRegex = new Regex("^5[1-5][0-9]{14}$");
Regex expressRegex = new Regex("^3[47][0-9]{13}$");
Regex dinersRegex = new Regex("^3(?:0[0-5]|[68][0-9])[0-9]{11}$");
Regex discoverRegex = new Regex("^6(?:011|5[0-9]{2})[0-9]{12}$");
Regex jcbRegex = new Regex("^(?:2131|1800|35\\d{3})\\d{11}$");
if (visaRegex.IsMatch(KrediKartiNo))
return "VISA";
else if (masterRegex.IsMatch(KrediKartiNo))
return "MASTER";
else if (expressRegex.IsMatch(KrediKartiNo))
return "AEXPRESS";
else if (dinersRegex.IsMatch(KrediKartiNo))
return "DINERS";
else if (discoverRegex.IsMatch(KrediKartiNo))
return "DISCOVERS";
else if (jcbRegex.IsMatch(KrediKartiNo))
return "JCB";
else
return "invalid";
}
Bir başka makalede görüşmek üzere…
Sedat Demirdoğan
Merhaba. TROY da eklerseniz çok iyi olur. Teşekkürler.