カード番号に隠された秘密~Luhnアルゴリズム~

Luhnアルゴリズム 理系

・カード番号の秘密って何?

・Luhnアルゴリズムって聞いたこと無いんだけど何なの?

あなたはクレジットカードなどのカード番号には、秘密があることを知っていましたか?

実は、カード番号にはある規則性があるんです。

この記事では、その規則性について例を交えながら紹介していきます。

記事を読み終えると、誰かに説明できる雑学が1つ身につきますよ!

カード番号の規則性とは

クレジットカードの番号は、適当な数字の羅列とお思いの方がいると思いますが、実は番号には規則性があります。

あなたはオンライン決済などで、クレジットカードの番号を入力するとき、打ち間違いをした経験がありませんか?

どうしてもカード番号は十数桁あるので、誤入力のリスクも高いです。

もしカード番号が適当な数字の羅列で形成されていたら、誤入力した番号が実在する他人の番号と一致してしまう、なんてこともあり得ますよね!

ですから、入力ミスを検出するために規則性が存在します。

そして、その規則性を調べるためにLuhnアルゴリズムが使われています。

このようなアルゴリズムに従って、本当のカード番号なのか、誤ったカード番号なのか判断することができるようになっています。

Luhnアルゴリズムとは

Luhnアルゴリズムの説明は以下の通りです。

Luhnアルゴリズム(Luhn algorithm)は、様々な識別番号の認証に使われている単純なチェックサム方式。MOD-10アルゴリズムとも。クレジットカード番号、IMEI番号、en:National Provider Identifier(アメリカでの医療機関の識別番号)、カナダ社会保険番号(Social Insurance Number)などで使われている。IBMの科学者 Hans Peter Luhn が1954年1月6日に特許を申請し、1960年8月23日に発効した。

記入ミスやタイプミスを検出するためのもので、クレジットマスターによる悪意ある攻撃を防ぐものではない。多くのクレジットカードや各国政府が発行する識別番号で、ランダムな数値群から正しい番号を区別するチェックディジットとして、単純な手法としてこのアルゴリズムを使っている。

引用元:フリー百科事典『ウィキペディア(Wikipedia)』

次に実際にLuhnアルゴリズムによる番号の検出方法について見ていきましょう。

  1. 右端から数えて偶数番目の数字をすべて2倍する。
  2. 1.の計算の後,すべての数字の総和を求める.ただし,1.の処理で数字が2桁になった場合は,1桁目と2桁目の数字を足す。
  3. 求めた総和の1の位が0であれば「正しい」,そうでなければ「誤り」と判断

言葉ではわかりにくいと思うので、実例を交えて説明していきます。

(例1)

入力された番号:7 4 3 0 3 9 1 3 5 7 5 6

右から数えて偶数番目を2倍:14 4 6 0 6 9 2 3 10 7 10 6

すべての数値の和を取る : 1+4+4+6+0+6+9+2+3+1+0+7+1+0+6=50

7 4 3 0 3 9 1 3 5 7 5 6 → 正しい

(例2)

入力された番号:4 5 2 9 4 5 3 9 7 9 1 0

右から数えて偶数番目を2倍:8 5 4 9 8 5 6 9 14 9 2 0

すべての数値の和を取る : 8+5+4+9+8+5+6+9+1+4+9+2+0=70

4 5 2 9 4 5 3 9 7 9 1 0  → 正しい

(例3)

入力された番号:1 2 5 3 1 5 6 3 4 3 1 9

右から数えて偶数番目を2倍:2 2 10 3 2 5 12 3 8 3 2 9

すべての数値の和を取る : 2+2+1+0+3+2+5+1+2+3+8+3+2+9=43

4 5 2 9 4 5 3 9 7 9 1 0 → 誤り

まとめ

Luhnアルゴリズムについて簡単にまとめます。

  1. 右端から数えて偶数番目の数字をすべて2倍する。
  2. 1.の計算の後,すべての数字の総和を求める.ただし,1.の処理で数字が2桁になった場合は,1桁目と2桁目の数字を足す。
  3. 求めた総和の1の位が0であれば「正しい」,そうでなければ「誤り」と判断

実は、クレジットカードの番号だけでなく、受験番号や学生証の番号にもこの規則性が適用されています。

他のカード番号にもLuhnアルゴリズムが使われているかもしれないので、お持ちのカードを調べてみるのも面白いですね!