Kredi kartı numarası doğrulama, bir ödeme formunun en çok yanlış anlaşılan parçasıdır; çünkü yaptığı iş sanıldığından çok daha sınırlıdır. Bu yazıda doğrulamanın tam olarak neyi engellediğini, kontrollerin hangi sırayla çalışması gerektiğini, kullanıcıya hangi mesajın verileceğini ve hangi durumlarda doğru bir numaranın haksız yere reddedildiğini bulacaksınız.
Kredi kartı numarası doğrulama tam olarak neyi engeller?
Doğrulamanın amacı, kullanıcının elindeki numarayı yazarken yaptığı kaba hataları erkenden yakalamaktır. Numaranın var olup olmadığını, bir hesaba bağlı olup olmadığını veya ödeme yapıp yapamayacağını söylemez. Bu ayrımı baştan kabul etmek, sonraki bütün kararları kolaylaştırır.
Doğrulamanın yakaladığı hatalar şunlardır: eksik yazılmış basamaklar, araya karışan harfler, bir basamağın yanlış tuşlanması ve komşu iki basamağın yer değiştirmesi. Bunların tamamı yazım kaynaklıdır. Kullanıcının gerçekten geçerli bir kartı yoksa doğrulama bunu anlayamaz; bunu ancak yetkilendirme aşaması ortaya çıkarır.
Bu nedenle doğrulama, kullanıcıyı hatalı bir denemeden koruyan bir kolaylık olarak görülmelidir. Güvenlik önlemi değildir ve öyle sunulmamalıdır. Doğrulamadan geçen bir numaranın gerçek bir kart olduğunu düşünen kullanıcı, sonraki adımda reddedildiğinde sistemi bozuk sanır.
Doğrulama sırası neden önemli?
Kontrolleri rastgele bir sırayla çalıştırmak, doğru numaraları reddetmenin en yaygın nedenidir. Doğru sıra şöyledir:
- Boşluk, tire, nokta ve parantez gibi ayırıcı karakterleri kaldırın.
- Geriye yalnızca rakam kaldığını doğrulayın.
- Uzunluğun kabul edilen aralıkta olduğunu kontrol edin.
- Kart ağını ön ekine göre belirleyin.
- Numaranın o ağ için beklenen uzunlukta olduğunu doğrulayın.
- Denetim basamağını sınayın.
Bu sıranın ilk iki adımı olmadan sonraki adımlar anlamsızdır. Araya bir boşluk karışmış numara, ham hâliyle değerlendirildiğinde uzunluk ve basamak kontrolünden geçemez; oysa numara kusursuzdur. Sıralamayı atlayan ekipler genellikle bunu “kullanıcı yanlış girdi” diye yorumlar ve gereksiz bir hata mesajı gösterir.
Uzunluk kontrolünün ağ tespitinden sonra gelmesi de önemlidir. On beş basamak bir ağ için doğru, bir diğeri için eksiktir. Uzunluğu tek bir sabit değere bağlamak, desteklenen kartların bir kısmını daha form aşamasında dışarıda bırakır.
Yalnızca tarayıcıda doğrulamak yeterli mi?
Hayır. Tarayıcıda çalışan doğrulama kullanıcıya hızlı geri bildirim vermek için değerlidir; ancak güvenlik sınırı değildir. Tarayıcıdan gelen veri her zaman değiştirilebilir. Kullanıcı formu doldurmadan doğrudan bir istek gönderebilir, alanı devre dışı bırakabilir veya kendi aracını yazabilir.
Bu nedenle aynı kontrollerin sunucu tarafında da çalışması gerekir. İki tarafta aynı kuralları uygulamak, bakımı zorlaştırıyorsa kuralları tek bir yerde tanımlayıp her iki tarafa dağıtmak daha iyidir. Aksi hâlde tarayıcı kuralları gevşetildiğinde sunucu katmanı farkında olmadan eski kuralı uygulamaya devam eder.
Sunucu tarafındaki doğrulama, hata mesajının niteliğini de değiştirir. Tarayıcıda alan altında kırmızı bir uyarı göstermek uygundur; sunucudan dönen bir hatada kullanıcıya hangi alanın sorunlu olduğunu açıkça söylemek gerekir.
Kullanıcı yanlış girdiğinde ne söylenmeli?
Hata mesajı, kullanıcının ne yapacağını bilmesini sağlamalıdır. “Geçersiz numara” cümlesi bunu başaramaz; çünkü kullanıcı neyin yanlış olduğunu bilmez. Eksik basamak, fazla basamak, rakam dışı karakter ve denetim hatası birbirinden farklı durumlardır ve farklı cümleler gerektirir.
Mesajın yeri de önemlidir. Alanın hemen altında, alanla görsel olarak ilişkilendirilmiş bir uyarı en anlaşılır olanıdır. Ekranın üstünde beliren genel bir bildirim, uzun formlarda fark edilmez.
Mesajın dili de önemlidir. Teknik terimler kullanıcıya bir şey anlatmaz; doğrulama kuralının adını duymak, sorunu çözmek için hiçbir ipucu vermez. Bunun yerine ne yapılacağını söyleyin: kaç basamak beklendiğini, boşlukların sorun olmadığını, güvenlik kodunun kartın neresinde durduğunu. Kısa ve eylem odaklı bir cümle, uzun bir açıklamadan her zaman daha etkilidir.
Bir başka ayrıntı, hatanın ne zaman gösterileceğidir. Kullanıcı daha ilk basamağı yazarken hata göstermek rahatsız edicidir. Alanın doldurulması bittiğinde, kullanıcı sonraki alana geçtiğinde veya gönderme düğmesine bastığında uyarı vermek dengeli bir yaklaşımdır. Numaranın son basamağı yazıldığı anda denetim yapmak ise çoğu kullanıcı için beklenmedik bir sürprizdir.
Hangi durumlarda doğru bir numara reddedilir?
Doğrulamanın haksız reddettiği durumlar genellikle aynı köklerden gelir. Birincisi, uzunluğun sabit varsayılmasıdır. On altı basamağa kilitlenen bir alan, on beş basamaklı kartları baştan eler. İkincisi, ayırıcıların temizlenmemesidir; kartını kopyala yapıştır ile dolduran kullanıcı, hiç fark etmediği bir boşluk yüzünden reddedilir.
Üçüncüsü, denetim basamağının yönünün yanlış uygulanmasıdır. Kural numaranın uzunluğuna göre hizalanır; basamak sayısı çiftse soldan birinci, tekse ikinci basamaktan başlanır. Bu ayrımı gözden kaçıran bir uygulama, geçerli numaraların bir kısmını reddeder. Dördüncüsü, kart ağı tespitinin katı olmasıdır; bazı salonlar yalnızca tanıdığı ön eklere izin verir ve tanımadığı ama geçerli bir numarayı reddeder.
Bu durumların hepsi test edilebilir. Elinizde farklı uzunluklarda ve farklı ağlardan numaralar bulunan bir test seti olsun; her numarayı forma yapıştırıp beklenen sonucu görün.
Üretici ile doğrulamayı hemen deneyin
Doğrulama kurallarınızı sınamak için elinizde farklı ağlardan ve uzunluklardan numaralar bulunması gerekir. Sitemizdeki üretici bu seti saniyeler içinde oluşturur: kart ağını seçip adedi belirleyin, üretilen numaraları kopyalayıp formunuza yapıştırın. Kısmi bir numarayı tamamlama seçeneği, belirli bir ön ekin doğru kabul edilip edilmediğini anlamak için de kullanışlıdır. Araç şu adreste: test kredi kartı numarası üretici.
Üretilen numaralar yalnızca yapısal olarak geçerlidir; hiçbiri gerçekte piyasaya sürülmemiştir, hiçbir hesaba bağlı değildir ve gerçek bir ödeme için kullanılamaz.
Geliştiriciler için: sıra, tek kaynak ve hata ayrımı
Doğrulama kodunu yazarken ilk hedefiniz tek bir doğruluk kaynağı oluşturmaktır. Uzunluk kuralları, ağ aralıkları ve denetim kuralı tek bir yerde tanımlansın; form, uygulama mantığı ve sunucu aynı tanımı kullansın. Kopyalanan kurallar zamanla birbirinden ayrışır ve en zor bulunan hatalar bu ayrışmadan doğar.
Hata türlerini kod düzeyinde ayırın: boş değer, kısa numara, uzun numara, rakam dışı karakter, tanınmayan ön ek ve denetim hatası. Ayrı dönen bir hata, kullanıcıya doğru cümleyi göstermenin yanı sıra ölçüm yapmanızı da sağlar; hangi hatanın ne sıklıkta oluştuğunu görürsünüz.
Denetim hesabında basamak yönünü mutlaka test edin. On beş ve on altı basamaklı numaralarla ayrı ayrı deneme yapın; yalnızca tek bir uzunlukla test etmek, yön hatasını gizler. Ayrıca denetimden geçmeyen bir numaranın gerçekten reddedildiğini doğrulayan bir test yazın; çoğu projede yalnızca başarı yolu test edilir.
Son olarak, kullanıcının girdiği numarayı hiçbir koşulda günlüğe veya hata raporuna olduğu gibi yazmayın. Kart numarası hassas veridir; hata ayıklama için bile olsa tam hâliyle kaydedilmemelidir. Bu kural, doğrulama kodunun bulunduğu her katman için geçerlidir.
Sonraki adımlar
Doğrulama zincirini kurduktan sonra denetim kuralının ayrıntılarını pekiştirmek için Luhn algoritması yazısına, numaranın bölümlerini anlamak için kart numarası biçimi yazısına bakabilirsiniz. Formun tamamını sistematik biçimde sınamak isterseniz ödeme formu test listesi adım adım ilerlemenizi sağlar.