Luhn Algoritması İle Kredi Kartı Numaraları İçin Validasyon

Berke Sayın
6 min readJul 27, 2023

--

Teknolojinin gelişmesiyle birlikte sanal dünya kavramı ortaya çıktı. Şu anda günlük hayatımızı devam ettirirken her türlü alışveriş ihtiyacımız için çoğunlukla telefonlarımızda veya bilgisayarlarımızda bulunan uygulamaları tercih ediyoruz. Ödeme işlemleri için de kredi veya banka kartlarımızı kullanıyoruz. Peki, alışverişlerimizde sıkça kullandığımız kredi veya banka kartları numaraları nasıl oluşturuluyor? Luhn Algoritması nedir ve bu konu ile nasıl bir bağlantısı var?

Görsel İçin Kaynak: https://inai.io/blog/payment-methods-in-asia-navigate-local-ecommerce-payments

Herkese merhaba. Bu yazımda Luhn Algoritması ile kredi veya banka kartları numaraları nasıl oluşturulur, ödeme sayfalarında validasyon nasıl sağlanır gibi konuları ele alacağım. Keyifli okumalar :)

Konular

  • Luhn Algoritması Nedir?
  • Neden Luhn Algoritması?
  • Kart Tipleri
  • Luhn Algoritması İle Kredi/Banka Kartı Numaraları Doğrulaması
  • JavaScript İle Luhn Algoritması: Kart Numaraları Doğrulaması

Luhn Algoritması Nedir?

Luhn algoritması, kredi kartı numaraları, IMEI numaraları, ulusal kimlik numaraları gibi çeşitli veri dizilerinin doğruluğunu basitçe kontrol etmek için kullanılan bir algoritmadır. 1954 yılında IBM’de çalışan Alman bilgisayar bilimcisi Hans Peter Luhn tarafından geliştirilmiştir.

Bu algoritma, bir dizi adımı içeren matematiksel işlemlerden oluşur ve özellikle veri girişi veya iletimi sırasında hata tespiti amacıyla kullanılır. Algoritma, özellikle online alışveriş için ödeme ekranlarında kredi/banka kartı numaralarını doğrulamak için uygulanmaktadır.

Neden Luhn Algoritması?

Hata Tespiti

Veri girişi sırasında kullanıcı hatası kaçınılmazdır. Kredi/banka kartı numaraları gibi uzun veri dizilerini yazarken hatalı tuş girişi olabilir. Luhn algoritması, basit matematiksel işlemleri kullanarak bu tür hataları tespit eder ve veri doğruluğunu kontrol eder.

Hızlı Doğrulama

Luhn algoritması, veri doğruluğunu sadece birkaç matematiksel işlemle hızlı bir şekilde kontrol eder. Dolayısıyla, online ödeme işlemleri ve diğer veri girişi süreçlerinde hızlı bir doğrulama sağlar. Uzun kredi/banka kartı numaraları gibi büyük veri dizileri üzerinde etkili bir şekilde çalışır.

Kolay Kullanım

Luhn algoritması, karmaşık matematiksel hesaplamalar veya veri tabanı sorguları gerektirmez. Basit bir algoritmadır ve herhangi bir programlama dilinde kolayca uygulanabilir.

Bu nedenlerle, Luhn algoritması özellikle ödeme işlemleri ve veri girişi alanlarında hata tespiti ve veri güvenliği için yaygın bir çözümdür. Veri doğruluğunu sağlayıp hataları tespit etmesi ile günlük yaşamımızda pek çok alanda bize fayda sağlar.

Ancak Luhn algoritması her türlü hata tespitini kesin olarak garanti etmez, sadece bazı hataları tespit edebilir ve bu nedenle tek başına güvenlik amacıyla kullanılmamalıdır.

Kart Tipleri

Luhn algoritmasının nasıl uygulandığına geçmeden önce kredi/banka kartları numaraları ile ilgili temel bilgileri paylaşmak istiyorum.

Kart numarası ile birlikte kartın ait olduğu kuruluş, kart tipi (MasterCard, Visa, American Express vs.) bilgisi kartın ön tarafında bulunur.

  • American Express: 34, 37 ile başlar.
  • Visa: 4 ile başlar.
  • MasterCard: 51, 52, 53, 54, 55 ile başlar.
  • Discover: 6011 ile başlar.
  • UnionPay: 62 ile başlar.
  • Troy: 9792 ile başlar.

Çoğu kredi veya banka kartı 16 hanelidir. Kredi kartınızın üzerinde yer alan 16 rakamın ilk 6 ya da 8 hanesi, kartı hangi bankanın verdiğini gösterir. Bank Identification Number (BIN) olarak da bilinen bu yöntem, kartın ait olduğu bankayı açıklar. American Express ödeme yöntemine ait kredi kartlarının numaraları ise buradaki diğer kartlardan farklı olarak 15 haneden oluşur.

Müşteri hesap numarası, kart üzerindeki 16 haneli rakamın içinde yer alır. Kartın ön yüzündeki rakamlardan 7. ve 15. de dâhil olmak üzere 7.-15. arasındaki 9 rakam, müşteri hesap numarasını ifade eder.

İlk 6 rakam, başka kişilerde de aynı şekilde olabilir. Fakat 7. ve 15. arasında yer alan rakamlar, kişiye özel tahsis edilir.

Geriye kalan son ve 16. rakam ise kredi kartı kontrol numarası (Check Digit) olarak bilinir. Luhn Algoritması ile üretilen bu rakam, kredi kartı numarasının geçerli olup olmadığını denetler.

Kredi kartı dolandırıcılığı yaygın bir problem olduğu için bankalar ve ödeme yöntemi sağlayan diğer kurumlar, bu konudaki önlemlerini sürekli olarak yeniler. Maksimum güvenlik önlemi için çeşitli algoritmalar geliştirir. Kartın geçerliliğini kontrol eden ve Check Digit adı verilen yöntem de bunlardan biridir.

Luhn Algoritması İle Kredi/Banka Kartı Numarası Doğrulaması

Standart 16 haneli bir kredi veya banka kartı numarasının ilk 15 hanesi banka tarafından belirlenir. Ancak kontrol hanesi (Check Digit) olarak isimlendirilen son hane diğer Luhn algoritması ile matematiksel olarak belirlenen bir rakamdır.

Algoritmanın kesin işleyişi 19.yy’ın başlarında Johann Carl Friedrich Gauss tarafından geliştirilen matematiksel bir teknik olan Modüler Aritmetiğe dayanmaktadır.

Burada örnek bir kart numarası üzerinden Luhn Algoritmasının çalışma mantığını anlatmak istiyorum. Bu işlem için online Fake Credit Card Number Generator tool’unu kullanabiliriz.

Kart Numaramız: 4556 9969 7074 955A

Buradaki son rakamı Luhn Algoritması ile bulacağız.

Burada 4 ile başlayan Visa’ya ait 16 haneli kart numaramız bulunuyor. Kart numaralarında son hanenin kontrol hanesi (Check Digit) olduğunu ve Luhn algoritması ile üretildiğini daha önce söylemiştim. Bu algoritma için matematiksel işlemler şu şekilde uygulanır:

STEP 1: Kart numarası için haneler şu formatta yazılır:
X - Y - X - Y / X - Y - X - Y / X - Y - X - Y / X - Y - X - Y

4 5 5 6 / 9 9 6 9 / 7 0 7 4 / 9 5 5 A
X Y X Y / X Y X Y / X Y X Y / X Y X Y

STEP 2: Sağdan saymaya başlayarak her çift hanedeki rakam 2 ile çarpılır (X değerleri 2 ile çarpılır).

2 * 5 = 10
2 * 9 = 18
2 * 7 = 14
2 * 7 = 14
2 * 6 = 12
2 * 9 = 18
2 * 5 = 10
2 * 4 = 8

STEP 3: Çarpım sonucu 2 haneli çıkanlar için, bu 2 hanedeki rakamlar toplanarak tek bir hane elde edilir.

2 * 5 = 10 (1 + 0 = 1)
2 * 9 = 18 (1 + 8 = 9)
2 * 7 = 14 (1 + 4 = 5)
2 * 7 = 14 (1 + 4 = 5)
2 * 6 = 12 (1 + 2 = 3)
2 * 9 = 18 (1 + 8 = 9)
2 * 5 = 10 (1 + 0 = 1)
2 * 4 = 8

8 tek haneli olduğu için aynen kalır.

STEP 4: Bu 8 hane (X değerleri) için elde edilen sonuçlar ve Y değerleri toplanır.

X için yapılan işlemlerden elde edilen sonuçların toplamı:
1 + 9 + 5 + 5 + 3 + 9 + 1 + 8 = 41

Y değerlerinin toplamı:
5 + 6 + 9 + 9 + 0 + 4 + 5 + A = 38 + A

Toplam:
41 + 38 + A = 79 + A

STEP 5: Toplam + A ifadesinde sonucu 10'un en yakın katına tamamlayacak A değeri kart için kontrol hanemiz (son rakamımız) oluyor.

79 + A = 10'un en yakın katı olması için 80 olmalı.

79 + A = 80

A = 1

Bu durumda kontrol hanesi (Check Digit - kartın son hanesi) = 1 olur.

Kart Numarası:
4556 9969 7074 955A
4556 9969 7074 9551

JavaScript İle Luhn Algoritması: Kart Numarası Doğrulaması

Son olarak bu algoritma uygulanırken yapılan matematiksel işlemler için kod örneğini paylaşmak istiyorum.

Burada kart numarası validasyonu için JavaScript kodunu yorum satırlarıyla birlikte paylaştım. Bu fonksiyonu şu şekilde farklı kart tipindeki numaralarla test edelim:

Yazı içerisinde de belirttiğim gibi kredi kartı örnek numaraları için şu tool’u kullanabilirsiniz:
https://www.creditcardvalidator.org/generator

Bu yazımda kredi veya banka kartları numaraları için validasyonun Luhn Algoritması kullanılarak nasıl sağlandığını açıklamaya çalıştım. Gelecek yazılarda görüşmek üzere :)

--

--

No responses yet