modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

Luhnアルゴリズムによる誤り検出

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で実装してみた