Luhn Algorithm
クレジットカードで使われている
一桁の誤入力まで検出できる
(1つの例外を除き)隣り合う2つの数字を入れ替えて入力してしまった場合も検出できる
0, 9の隣り合うペアは、偶数桁だろうと奇数桁だろうと変わらんので($ p(x)の定義より)、入れ替えても気付けない
計算
カード番号: $ a_{16}, a_{15}, a_{14}, ..., a_1, a_0
関数$ p(x)
$ 0 \ (x = 0)
$ 9 \ (x = 9)
$ 2n \bmod 9 \ (1 \le x \le 8)
チェックサム$ S = a_1 + p(a_2) + ... + a_{15} + p(a_{16})
$ S \bmod 10 = 0ならOK。そうでなければInvalid
実際に手元のカードで試してみると良いkekeho.icon