Normal ifadeler, kredi kartı numaraları gibi basit, iyi tanımlanmış kurallarla biçimleri doğrulamak için mükemmel bir araçtır.
Normal ifade, bir arama kalıbı oluşturan bir karakter dizisidir. Normal ifadeler çoğunlukla metinleri veya dizeleri aramak, doğrulamak ve dönüştürmek için kullanılır.
Mastercard, Visa Card ve American Express gibi kredi kartı numaralarını normal ifadelerle nasıl doğrulayacağınızı öğrenin.
Bir Kredi Kartı Numarasını Doğrulamak için RegEx Ne Zaman Kullanılır?
Üçüncü taraf hizmetleri, her işlem girişimi için ücret alır. İşlem başarılı olsun veya olmasın, masrafları ödemeniz gerekir. Bu gibi durumlarda, geçersiz olduğu açık olan kredi kartı numaralarını reddetmek istersiniz. Normal ifadeler kullanarak kredi kartı numaralarını hızla doğrulayabilirsiniz.
Ancak ödeme özelliğiniz için normal ifade doğrulamasına tamamen güvenemezsiniz. Kartı veren kuruluşlar, kart numarası kalıplarını düzenli olarak değiştirir (yeni kalıplar tanıtmak veya eskilerini geri çekmek), bu nedenle regex yöntemi en sağlam çözüm değildir. Bununla birlikte, Wikipedia gibi sık güncellenen bir kaynaktan kart modellerini takip etmeye çalışabilirsiniz .
Ayrıca logoları veya etiketleri görüntülemek için kullanabileceğiniz kart markasını hızlı bir şekilde bulmak için normal ifadeyi de kullanabilirsiniz.
Normal ifadelerin birkaç pratik kullanım durumu vardır. Linux grep komutu , muhtemelen regex’in en yaygın pratik kullanım durumudur.
Bu projede kullanılan kod bir GitHub deposunda mevcuttur ve MIT lisansı altında kullanmanız için ücretsizdir.
Mastercard Numarasını Doğrulamak için RegEx
Bir Mastercard numarası, aşağıdaki koşulları karşılıyorsa geçerlidir:
Dize herhangi bir özel karakter, alfabe veya boşluk içermemelidir.
Karakter sayısı 16’ya eşit olmalıdır.
Dize, 2 basamaklı bir sayı aralığıyla (51 ile 55 arasında değişen) veya 4 basamaklı bir sayı aralığıyla (2221 ile 2720 arasında değişen) başlamalıdır.
Dize 2 basamaklı bir sayı aralığıyla başlıyorsa (51 ila 55 arasında), sonraki 14 basamak 0 ila 9 arasında bir sayı olmalıdır.
Dize 4 basamaklı bir sayı aralığıyla başlıyorsa (2221 ile 2720 arasında), sonraki 12 basamak 0 ile 9 arasında bir sayı olmalıdır.
Aşağıdaki normal ifade yukarıdaki koşulları karşılar ve bir Mastercard numarasını doğrulayabilir:
^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[0-1]\d|2720)[0-9]{12}$
Yukarıdaki ifadeden memnun değilseniz, önce normal ifadeler için başlangıç kılavuzuna bakın .
Mastercard numarasını herhangi bir programlama dilinde doğrulamak için yukarıdaki normal ifadeyi kullanabilirsiniz. Python’da bunu nasıl yapacağınız aşağıda açıklanmıştır:
import re
def checkMasterCardNo(cardNo):
regex = “^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[0-1]\d|2720)[0-9]{12}$”
r = re.compile(regex)
if (re.search(r, cardNo)):
print(“Valid”)
else:
print(“Not Valid”)
card1 = “5110762060017101”
checkMasterCardNo(card1)
card2 = “8632458236982734”
checkMasterCardNo(card2)
Bu kodu çalıştırmak, ilk sayının geçerli olduğunu ancak ikincisinin geçerli olmadığını onaylayacaktır:
Visa Kart Numarasını Doğrulamak için RegEx
Bir Visa Card numarası, aşağıdaki koşulları karşılaması halinde geçerlidir:
Dize herhangi bir özel karakter, alfabe veya boşluk içermemelidir.
Dize 4 ile başlamalıdır.
Karakter sayısı 13 veya 16 olmalıdır. Eski vize kartlarında 13, yenilerinde 16 karakter vardır.
Karakter sayısı 13 ise, son 12 hane 0 ile 9 arasında bir sayı olmalıdır.
Karakter sayısı 16 ise, son 15 hane 0 ile 9 arasında bir sayı olmalıdır.
Aşağıdaki normal ifade yukarıdaki koşulları karşılar ve bunu bir Visa Card numarasını doğrulamak için kullanabilirsiniz:
^4[0-9]{12}(?:[0-9]{3})?$
Bir Visa Card numarasını doğrulamak için Python yaklaşımı aşağıdadır:
import re
def checkVisaCardNo(cardNo):
regex = “^4[0-9]{12}(?:[0-9]{3})?$”
r = re.compile(regex)
if (re.search(r, cardNo)):
print(“Valid”)
else:
print(“Not Valid”)
card1 = “4539890694174109”
checkVisaCardNo(card1)
card2 = “49237429498”
checkVisaCardNo(card2)
Yine, çıktı ilk sayının geçerli olduğunu, ikinci sayının geçersiz olduğunu onaylar:
American Express Kart Numarasını Doğrulamak için RegEx
American Express kart numarası, aşağıdaki koşulları karşılıyorsa geçerlidir:
Dize herhangi bir özel karakter, alfabe veya boşluk içermemelidir.
Bu karakter sayısı 15’e eşit olmalıdır.
Dize 34 veya 37 ile başlamalıdır.
Son 13 hane 0 ile 9 arasında bir sayı olmalıdır.
Aşağıdaki normal ifade yukarıdaki koşulları karşılar ve bunu bir American Express Card numarasını doğrulamak için kullanabilirsiniz:
^3[47][0-9]{13}$
Aşağıdaki Python kodunu kullanarak bir American Express Card numarasını doğrulayabilirsiniz:
import re
def checkAmericanExpressCardNo(cardNo):
regex = “^3[47][0-9]{13}$”
r = re.compile(regex)
if (re.search(r, cardNo)):
print(“Valid”)
else:
print(“Not Valid”)
card1 = “372831730491196”
checkAmericanExpressCardNo(card1)
card2 = “84732593847743042”
checkAmericanExpressCardNo(card2)
Çıktı bir kez daha ilk sayının geçerli olduğunu doğrular, ancak ikincisi geçersizdir:
Normal İfadelerin Uygulamaları
Genel kredi kartı numaralarını doğrulamak için oldukça basit bazı normal ifadeler kullanabilirsiniz. RegEx, veri ön işleme, kalıp eşleştirme, veri çıkarma, sözcük analizi, doğal dil işleme, web kazıma ve daha fazlası için kullanabileceğiniz güçlü bir araçtır. HTML formlarının doğrulanmasını işlemek için web geliştirmede normal ifadeler de kullanabilirsiniz.