アルゴリズムの勉強(2)

誤り検出符号

Luhn(ルーン)のアルゴリズム

クレジットカードの番号の誤り検出を行うのに使われているらしい。

環境

$ node --version
v13.5.0
$ tsc --version
Version 3.7.4

コード

const card_number: string  = "1234567890123456";
let w: number = 1;
let t: number = 0;
let d: number = 0;

for (let i: number = card_number.length - 1; i >= 0; i--) {
  d = w * parseInt(card_number.charAt(i));
  if (d > 9) {
    d -= 9;
  }
  t += d;
  w = 3 - w;
}

if (t % 10 == 0) {
  console.log("有効");
} else {
  console.log("無効");
}

実行結果

$ tsc luhn.ts && node luhn.js
無効

所感

実際に使われているらしいアルゴリズム。上の実行結果では 無効 と表示されているが、それは実装1行目の card_number がダミーであるため。自分のカード番号を入れたらちゃんと 有効 と表示されたので、「お〜〜」って声が出てしまった。

こういうの楽しい。