Created
October 12, 2022 06:12
-
-
Save mityaua/6f56bd09423ee027f827f2a57fa6c36a to your computer and use it in GitHub Desktop.
Алгоритм Луна
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Luhn = (card) => { | |
// Здесь храним контрольную сумму | |
let checksum = 0; | |
// Переводим номер карточки из строки в массив чисел | |
const cardnumbers = card.split('').map(Number); | |
// Проходимся по каждому числу | |
for (const [index, num] of cardnumbers.entries()) { | |
// Если index чётный, значит число стоит на нечётной позиции | |
// Так получается потому что считаем с нуля | |
if (index % 2 === 0) { | |
let buffer = num * 2; | |
// Если удвоенное число больше 9, то вычитаем из него 9 и прибавляем к контрольной сумме | |
// Если нет, то сразу прибавляем к контрольной сумме | |
buffer > 9 ? checksum += buffer - 9 : checksum += buffer; | |
} | |
// Если число стоит на чётной позиции, то прибавляем его к контрольной сумме | |
else { | |
checksum += num; | |
} | |
} | |
// Если контрольная сумма делится без остатка на 10, то номер карты правильный | |
return checksum % 10 === 0 ? true : false; | |
} | |
console.log(Luhn('4111111111111111')) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment