2013年07月26日の記事を再掲載しています。

ああしてこうすると、必ず10の倍数に。

って適当に新しい数字の羅列があてがわれる、って思われてるなら、それは間違いです。良質な数字列がえてしてそうであるように、そこには一定のアルゴリズムが使われているんです。

といっても、カード番号の最初の数字はカード会社によって決まっていて、VISAなら4、マスターカードなら5、アメックスなら34か37という具合です。でも、最初じゃなくて最後の1ケタがミソなんです。Data Geneticsによれば、これがあることでカード番号を書き込んだりコンピューターで入力したりしたとき、その番号が正しい番号かどうかすぐ検知されるんだそうです。

一般的な16ケタのクレジットカード番号では、最初の15ケタはそれを発行する銀行が決めている。が、最後の1ケタは｢チェック・デジット｣と呼ばれ、前の15ケタに基いて数学的に決まる。



このチェック・デジットをカードの持ち主が自分で選ぶことはできない。それを決定する式を作り出したのはハンス・ペーター・ルーン、1954年当時IBMの研究者であった。このアルゴリズムは当初は特許化されていたが、今では世界標準ISO／IEC 7812－1としてパブリックドメインとなっている。 チェック・デジットを単体で見ただけでは、クレジットカード番号が間違って入力された場合でも間違いを検知できない。仮にチェック・デジットを当てずっぽうで入力しても、10回に1回は当たりになるからだ。が、ルーンのアルゴリズムに基いて数字列全体を見れば、9と6を入れ替えてしまうといった間違いがひとつあるだけでもそれを検知できる。また、隣り合うふたつの数字の順序の間違いも、ほぼすべての数の組み合わせ（09と90の間違いなどいくつかは不可能）において検知できる。これらの間違いはカード番号を書き込むときによく見られるもので、チェック・デジットがその検知に役だっている。 ルーン・アルゴリズムによる副産物は、上にも書いたように、当てずっぽうにチェック・デジットを入れても10回に1回しか当たらないということである。これによって、事情を知らないハッカーや犯罪者が適当に生成したクレジットカード番号を使おうとしても、カードの持ち主は多少ながら守られている。

ちなみにルーンのアルゴリズムとは、こんなものだそうです。

チェック・デジットを含めて右から偶数ケタ目（2ケタ目、4ケタ目、6ケタ目…）の数字にそれぞれ2をかけて、それらの数字を全部合計する。（上の例で34）

右から奇数ケタ目の数字（上の例で33）を、上で出した数字に全部合計する。（上の例で67）

その数を10の倍数（10、20、30…）にするために足す数（上の例で3）が、チェック・デジットになる。

なるほど～。それで決まった最後の1ケタを足すと、10の倍数になるんですね。あ、やってみたらホントだ…なんか感動。ルーンさん、ありがとうございました！

［Data Genetics via Neatorama、Wikipedia、Image by Images_of_Money under Creative Commons license］

Jamie Condliffe（原文／miho）