Skip to content

Instantly share code, notes, and snippets.

@mityaua
Created October 12, 2022 06:12
Show Gist options
  • Save mityaua/6f56bd09423ee027f827f2a57fa6c36a to your computer and use it in GitHub Desktop.
Save mityaua/6f56bd09423ee027f827f2a57fa6c36a to your computer and use it in GitHub Desktop.
Алгоритм Луна
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