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?
- Sayıyı Tersten Al: Doğrulanacak sayının tüm basamaklarını sağdan sola sıralayın.
- Çift ve Tek Basamaklar: Tersten alınmış sayının her bir çift pozisyonundaki basamağı ikiyle çarpın. Eğer sonuç 9dan büyükse, iki basamaklı sonucu bir basamaklı hale getirmek için 9 çıkarın.
- Toplama İşlemi: Çift pozisyondaki (işlenmiş) basamakları ve tek pozisyondaki (değişmeden bırakılmış) basamakları toplayın.
- Mod 10 Kontrolü: Toplam, 10a 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";
?>