Luhn algoritmi
Abbosbek Sulaymonov
Har birimiz hozirgacha hech bo'lmaganda bir marta bo'lsa ham karta raqamimizni qaysidir servisga ulaganmiz. Aynan ulash vaqtida karta raqam kiritayotganda shunchaki random raqam kirita olmaymiz. Sababi, biz kiritayotgan raqamlar tekshirib boriladi va bu tekshiruv ostida aynan Luhn algoritmi yotadi.
Bu algoritm identefikatsiya raqamlarini tekshirish uchun ishlatiladi. Eng keng tarqalgan namuna sifatida bugun karta raqamlari ustida tekshiruv bilan misol keltirib beraman.
O'zi algoritm qay tarzda ishlaydi? Keling bosqichma bosqich ko'rib chiqamiz:
- Raqamlarni o'ng tomondan tekshirib boshlaymiz
- Har 2-sonni 2 ga ko'paytiramiz
- Agar ko'paytma natijasi 9 dan katta bo'lsa, raqamlar yig'indisini olamiz
- Va 2 ga ko'paytirib raqamlar yig'indisi olingan sonlarni va 2 ga ko'paytirilmagan sonlarni yig'indisini olamiz
- Agar barcha sonlar yig'indisi 10 ga bo'linsa, demak bu karta raqami to'g'ri aks holda noto'g'ri
Keling endi shuni vizual tarzda ko'ramiz:
Yuqoridagi algoritm bo'yicha JavaScriptda karta raqamini tekshiruvchi funksiya yozib ko'ramiz:
function isValidCardNumber(number) {
// bo'sh joylarni olib tashlaymiz
const sanitized = number.replace(/\s+/g, "");
let sum = 0;
let isDouble = false;
// O'ngdan chapga qarab yuramiz
for (let i = sanitized.length - 1; i >= 0; i--) {
let digit = parseInt(sanitized[i], 10);
if (isDouble) {
digit *= 2;
if (digit > 9) digit -= 9;
}
sum += digit;
isDouble = !isDouble
}
return sum % 10 === 0;
}
console.log(isValidCardNumber("5614 6812 0790 6565")); // true
console.log(isValidCardNumber("4561 2612 1234 5464")); // false
Bu algoritm nafaqat karta raqamlarini balki ko'plab identifikatsiya raqamlarini tekshirish uchun ham qo'l keladi.
E'tiboringiz uchun rahmat.