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.
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 FunctionC# Ö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";
?>