Luhn algoritması (Modulus 10 veya mod 10 algoritması olarak da bilinir), kredi kartı numaralarını veya diğer sayı dizilerini doğrulamak için kullanılan bir kontrol algoritmasıdır. Algoritma, bir dizi sayının geçerli bir formatta olup olmadığını hızlı bir şekilde belirlemek için tasarlanmıştır.

Luhn Algoritması Nasıl Çalışır?

  1. Sayıyı Tersten Al: Doğrulanacak sayının tüm basamaklarını sağdan sola sıralayın.
  2. Çift ve Tek Basamaklar: Tersten alınmış sayının her bir çift pozisyonundaki basamağı ikiyle çarpın. Eğer sonuç 9’dan büyükse, iki basamaklı sonucu bir basamaklı hale getirmek için 9 çıkarın.
  3. Toplama İşlemi: Çift pozisyondaki (işlenmiş) basamakları ve tek pozisyondaki (değişmeden bırakılmış) basamakları toplayın.
  4. Mod 10 Kontrolü: Toplam, 10’a tam bölünebiliyorsa (mod 10 = 0), sayı geçerlidir.
VB.NET örnek kod
Function IsValidLuhn(number As String) As Boolean
    Dim sum As Integer = 0
    Dim alternate As Boolean = False

    For i As Integer = number.Length - 1 To 0 Step -1
        Dim digit As Integer = Integer.Parse(number(i).ToString())
        If alternate Then
            digit *= 2
            If digit > 9 Then
                digit -= 9
            End If
        End If
        sum += digit
        alternate = Not alternate
    Next

    Return sum Mod 10 = 0
End Function

C# Örnek Kod :
using System;

class Program
{
    static bool IsValidLuhn(string number)
    {
        int sum = 0;
        bool alternate = false;

        for (int i = number.Length - 1; i >= 0; i--)
        {
            int digit = int.Parse(number[i].ToString());
            if (alternate)
            {
                digit *= 2;
                if (digit > 9)
                {
                    digit -= 9;
                }
            }
            sum += digit;
            alternate = !alternate;
        }

        return sum % 10 == 0;
    }

    static void Main(string[] args)
    {
        Console.WriteLine(IsValidLuhn("4532015112830366")); // Örnek Kart Numarası
    }
}


PHP Örnek Kod :
<?php
function isValidLuhn($number) {
    $sum = 0;
    $alternate = false;

    for ($i = strlen($number) - 1; $i >= 0; $i--) {
        $digit = intval($number[$i]);
        if ($alternate) {
            $digit *= 2;
            if ($digit > 9) {
                $digit -= 9;
            }
        }
        $sum += $digit;
        $alternate = !$alternate;
    }

    return $sum % 10 === 0;
}

// Örnek Kullanım
echo isValidLuhn("4532015112830366") ? "Geçerli" : "Geçersiz";
?>