Luhnアルゴリズム

by yshrkn

JavaScript

/*
* Luhnアルゴリズム
*/
function checkCardNumber(cardNumber) {
	var _cardNumber = cardNumber;
	var reversedNumber;
  var allNumbersAddedResult = 0; //Luhnアルゴリズムを用いた、各桁の計算結果

	// 数値を反転
	for (var i = 0, len = String(_cardNumber).length; i <= len; i++) {
  	reversedNumber += String(_cardNumber).substr((len - i), 1);
  }

	for (var i = 1; i <= len; i++) {
    var targetNumber = String(_cardNumber).substr((len - i), 1);

  	// 偶数番目の場合は、targetNumberを2倍にする
  	if (i % 2 === 0) {
      targetNumber *= 2;

      // 2倍した結果が2桁であれば、それぞれの位を足す
      if (String(targetNumber).length === 2) {
        targetNumber = Number(String(targetNumber).charAt(0)) + Number(String(targetNumber).charAt(1));
      }
    }

    allNumbersAddedResult += Number(targetNumber);
  }

  console.log("Luhnアルゴリズムを用いた各桁の計算結果:",allNumbersAddedResult);
  return allNumbersAddedResult % 10 === 0;
}

console.log(checkCardNumber(49927398716));
console.log(checkCardNumber(49927498716));

console.log(checkCardNumber(19547));
console.log(checkCardNumber(19548));