Luhnアルゴリズムとは?
Luhnアルゴリズムは「mod 10」アルゴリズムとも呼ばれ、IBMの科学者ハンス・ペーター・ルーン氏が1954年に考案したシンプルなチェックサム計算法です。クレジットカードやデビットカードの番号、携帯電話の製造番号であるIMEI、さらに各国の身分証番号など、識別番号の妥当性を検証する用途で広く使われています。1桁の入力ミスや、隣り合う数字の入れ替えといったよくある誤りの大半を検出できますが、あくまで基本的なデータ整合性チェックであり、暗号的なセキュリティ対策ではない点に注意してください。
この計算機の使い方
検証したい番号を入力欄にそのまま入力してください(スペースやハイフンは自動的に無視されます)。各桁を処理してLuhnチェックサムを適用し、その番号が有効(VALID)か無効(INVALID)かを判定します。あわせて、合計値・10で割った余り(mod 10)・末尾のチェックディジットも表示されます。
計算式の仕組み
まず各桁を右から左へ読み進めます。一番右の桁(チェックディジット)はそのままにし、そこから1つおきの桁を2倍にします。2倍した結果が9を超えた場合は、そこから9を引きます(これは各桁を足し合わせるのと同じです。例:\(8\times2=16 \to 1+6=7\))。こうして得られたすべての値を合計し、その合計が10で割り切れれば、その番号はLuhnチェックに合格です。
$$\text{Valid} \iff \left(\sum_{i=0}^{n-1} f(d_i)\right) \bmod 10 = 0 \\[1.5em] \text{where}\quad \left\{ \begin{aligned} d_i &= i\text{-th digit of } \text{Number} \text{ (from right)} \\ f(d_i) &= \begin{cases} d_i & i \text{ even} \\ 2d_i - 9\,[2d_i>9] & i \text{ odd} \end{cases} \end{aligned} \right.$$
具体例で確認
番号79927398713を例に考えてみましょう。右から1つおきの桁を2倍し、9を超えた値を調整すると、調整後の桁の合計は70になります。\(70 \bmod 10 = 0\) なので、この番号は有効です。
よくある質問(FAQ)
Luhnチェックに合格すれば、実在するカードということですか?いいえ。番号の形式が正しいことを確認できるだけで、その口座が実在するか、残高があるかまでは判定しません。
どんな文字が使えますか?使用されるのは数字のみです。スペース・ハイフン・その他の記号は計算前に取り除かれます。
2倍したときに9を引くのはなぜですか?2倍して9を超えた数から9を引くと、その数の各桁を足し合わせた結果と一致します。これはLuhn本来のルールが求めている処理そのものだからです。