Luhnアルゴリズムについてちょっと話題に上がったので書いてみる
Luhnアルゴリズム 1
クレジットカード番号やIMEI番号の検証に使われているアルゴリズムで
- 任意の1桁の間違いや隣接する桁の数字の順序間違いを検出できる
- 09 から 90 (または逆)という間違いは検出できない
- 同じ数字が2つ連続する場合の間違いも10種類のうち4種類までは検出できる
- 22 ⇔ 55、33 ⇔ 66、44 ⇔ 77 は検出できない
記入ミスやタイプミスを検出するもので、クレジットマスターを防ぐことはできない (ここテストにでます
IMEI番号は電話のキーパッドで*#06#と入力すると表示される
検証手順
- 右端のチェックディジットを1番目として、偶数番目の桁を2倍にする。
- 2倍にしていない桁も含め、各数字の総和を求める(2倍にした桁が2桁になった場合は、それぞれを別々の数字として加える)。
- この総和の下1桁が0なら(つまり、10で割り切れる場合)、この番号はLuhnアルゴリズムでは正しく、そうでない場合は正しくない。
実装
これをScalaで実装してみた