クレジットカード番号のチェックデジットなどに使う簡易的なアルゴリズム。
以下、Wikipediaから引用
Luhnアルゴリズムは、チェックディジットを含む数が正しいかどうかを検証する。
チェックディジットは通常、一意な番号に付与され、チェックディジットを含めた全体を認証番号などに使う。
この番号は以下のようにして検証できる。
- 右端のチェックディジットを1番目として、偶数番目の桁を2倍にする。
- 2倍にしていない桁も含め、各数字の総和を求める(2倍にした桁が2桁になった場合は、それぞれを別々の数字として加える)。
- この総和の下1桁が0なら(つまり、10で割り切れる場合)、この番号はLuhnアルゴリズムでは正しく、そうでない場合は正しくない。
例として、49927398716 という番号を検証する場合を考える。
- 右端から偶数番目の桁をそれぞれ2倍する: (1×2) = 2, (8×2) = 16, (3×2) = 6, (2×2) = 4, (9×2) = 18
- それぞれの数字の総和を計算する(括弧で囲まれた数字は上のステップで2倍した桁): 6 + (2) + 7 + (1+6) + 9 + (6) + 7 + (4) + 9 + (1+8) + 4 = 70
- 10で割りきれるか調べる: 70 mod 10 = 0 なので、この番号は正しい。
Luhnアルゴリズム(Wikipedia) http://ja.wikipedia.org/wiki/Luhn%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
ECサイトの動作テストに使える、クレジットカードのテスト番号一覧 http://www.webcreatorbox.com/tech/creditcard-test-numbers/
brainstorm Luhnアルゴリズムでクレジットカードの番号をチェック http://d.hatena.ne.jp/yuheiomori0718/20130427/1367074612
Wikipediaのコード例以外の方法でPythonで書く。
「奇数番目と偶数番目で処理を分ける」、これをどう表現するかが考えどころ。
2で割り切れる(i % 2 == 0)という表現を使わずに書きたい。