Home / Genel / Kredi Kartı Numaralarının Doğrulama Süreci: Luhn Algoritması Nasıl Çalışır?

Kredi Kartı Numaralarının Doğrulama Süreci: Luhn Algoritması Nasıl Çalışır?

Kredi kartı kullanımı, günlük alışverişlerimizin ayrılmaz bir parçası haline geldi. Online alışverişlerde kredi kartı tiplerine göre farklı kampanyalar için kredi kartı bankasını öğrenmek gerekmekte. Bunun için binlist.net‘i kullanmaktayız. Fakat, bu kolaylığın arkasında, kredi kartı numaralarının doğruluğunu ve güvenliğini sağlayan karmaşık sistemler bulunmaktadır. Kredi kartı numaralarının doğrulama sürecinin merkezinde, Hans Peter Luhn tarafından icat edilen ve genellikle Mod 10 algoritması olarak da bilinen Luhn Algoritması yer alır. Bu blog yazısında, Luhn Algoritması’nın kredi kartı numaralarını nasıl doğruladığını ve bu sürecin neden önemli olduğunu inceleyeceğiz.

Luhn Algoritması Nedir?

Luhn Algoritması, bir sayı dizisinin (genellikle kredi kartı numarası) yapısal olarak geçerli olup olmadığını kontrol etmek için kullanılan basit bir checksum formülüdür. Bu algoritma, yanlışlıkla girilen sayıların veya hatalı sayı dizilerinin tespit edilmesine yardımcı olur, ancak kartın gerçekten geçerli ve kullanımda olduğunu doğrulamaz.

Algoritmanın Çalışma Prensibi

Luhn Algoritması, kredi kartı numarasının son hanesi hariç, sağdan sola doğru her ikinci hane üzerinde işlem yapar. İşlem adımları şu şekildedir:

  1. Sağdan başlayarak, her ikinci rakam iki katına çıkarılır. Eğer sonuç çift haneli bir sayıysa, iki hane toplanarak tek bir rakama indirgenir.
  2. Bu işlemden elde edilen tüm rakamlar, diğer hanelerdeki rakamlarla birlikte toplanır.
  3. Elde edilen toplamın 10’a tam bölünebilmesi, numaranın geçerli olduğunu gösterir.

Neden Önemli?

Luhn Algoritması sayesinde, kredi kartı numaralarının yanlışlıkla hatalı girilmesi büyük ölçüde önlenir. Bu, özellikle çevrimiçi alışverişlerde, müşterilerin yanlış numara girmesi sonucu oluşabilecek aksaklıkları azaltır. Ayrıca, bu algoritma, sahte kredi kartı numaralarının kolaylıkla üretilmesinin önüne geçerek bir güvenlik katmanı sağlar.

Kod Örnekleri ve Kullanım Alanları

Luhn Algoritması, çeşitli programlama dillerinde kolaylıkla uygulanabilir. Örneğin, JavaScript, Python, C# ve hatta Excel formülleri kullanılarak bir kredi kartı numarasının son kontrol hanesi hesaplanabilir. Bu geniş uygulanabilirlik, algoritmanın çeşitli platformlarda ve uygulamalarda kolayca entegre edilebilmesini sağlar.

Excel Formülü

Excel’de, bir hücredeki kredi kartı numarasının ilk 15 hanesi için aşağıdaki formülü kullanabilirsiniz (Örneğin, A1 hücresinde 15 haneli numara varsayılarak):

=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*(MOD(ROW(INDIRECT("1:"&LEN(A1)))+LEN(A1)+1,2)+1)),10),10)

Bu formül, her bir rakamı işlemek, çift haneli pozisyonlardaki rakamları ikiyle çarpmak, 9’dan büyük sonuçları düzeltmek ve sonuçların toplamını almak için MID, ROW, INDIRECT, SUMPRODUCT, ve MOD fonksiyonlarını kullanır. Ardından, toplamın 10’a tamamlanması için gerekli olan değeri hesaplar, bu da kart numarasının son hanedir.

Bu kodlar ve formül, verilen bir kart numarasının son hanesini Luhn algoritması kullanarak hesaplar. Hesaplanan bu son hane, kart numarasının geçerli olup olmadığını kontrol etmek için kullanılabilir.

Node.js

function calculateLuhnDigit(cardNumber) {
    let sum = 0;
    for (let i = 0; i < cardNumber.length; i++) {
        let digit = parseInt(cardNumber[i]);
        if (i % 2 == 0) {
            digit = digit * 2;
            if (digit > 9) {
                digit = digit - 9;
            }
        }
        sum += digit;
    }
    sum = sum * 9;
    return sum % 10;
}

let cardNumber = "123456789012345"; // Örnek kart numarasının ilk 15 hanesi
let luhnDigit = calculateLuhnDigit(cardNumber);
console.log("16. hane: ", luhnDigit);

C#

using System;

class Program {
    public static int CalculateLuhnDigit(string cardNumber) {
        int sum = 0;
        for (int i = cardNumber.Length - 1; i >= 0; i--) {
            int digit = int.Parse(cardNumber[i].ToString());
            if ((cardNumber.Length - i) % 2 == 0) {
                digit = digit * 2;
                if (digit > 9) {
                    digit = digit - 9;
                }
            }
            sum += digit;
        }
        sum = sum * 9;
        return sum % 10;
    }

    static void Main() {
        string cardNumber = "123456789012345"; // Örnek kart numarasının ilk 15 hanesi
        int luhnDigit = CalculateLuhnDigit(cardNumber);
        Console.WriteLine("16. hane: " + luhnDigit);
    }
}

Python

def calculate_luhn_digit(card_number):
    sum = 0
    for i, digit in enumerate(reversed(card_number)):
        digit = int(digit)
        if i % 2 == 0:
            digit = digit * 2
            if digit > 9:
                digit -= 9
        sum += digit
    sum = sum * 9
    return sum % 10

card_number = "123456789012345"  # Örnek kart numarasının ilk 15 hanesi
luhn_digit = calculate_luhn_digit(card_number)
print("16. hane:", luhn_digit)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir