クレジットカード番号の決め方


PayPayの騒動を見て疑問に思ったTipsのような話。

クレジットカード番号はどうやって決まるのか?


  • 多くは16桁の番号。ただし、14桁や15桁のクレジットカード番号もある
  • 最初の6桁は、BIN(Bank Identification Number, 銀行識別番号)またはIIN(Issuer Identification Number, 発行者識別番号)と呼ばれ、カードのイシュア(発行事業者)を特定する。
  • 残りの部分は、イシュアが決める。
    • ただし、多くのクレジットカード番号会社では、番号の入力間違いの検知などをチェックするため、番号の決定にLuhnアルゴリズム(ルーンアルゴリズム)を採用している。
    • そして、最終桁はチェック・ディジットになる。
  • なお、これはISO/IEC 7812に規定されている
  • ISO/IEC 7812 - ウィキペディア

Luhnアルゴリズムとは

調べると興味深いが、整理すると3つの工程を踏む
  1. チェックデジット(最終桁)を除く数値を決定する
    1. 仮に 1234 5678 9012 345X とする。(Xは、チェックデジット)
  2. チェックデジットを含んで右から偶数桁を2倍にする。ただし、2桁の場合はそれぞれの桁を分ける。(本が6ならば、12なので1+2)とする。それ以外はそのままとして、それらの総和を出す
    1. 偶数桁 2 + 6 + ( 1+0 ) + (1+4) + (1+8) + 2 + 6 + (1+0)
    2. 奇数桁  2 + 4      +     6    +     8    +    0 + 2 + 4 
    3. 上の総和は、58
  3. 10の倍数になるように、チェックデジットを求める。
    1. 直近の10の倍数だと、60なので、60-58=2
    2. 最終的には、 1234 5678 9012 3452 という数値が決定される
これは、逆に言うと、手持ちのクレジットカード番号を2番めの法則に基づいて計算すると、必ず10の倍数になるということを意味している。

なぜLuhaアルゴリズムを使うのか

一つは、入力間違いをすぐに検知するためである。
多くのカードは、磁気カードであるのでスライドしたときに微妙に違う数値が出ることがある。その場合に、この計算式を使えば、正しいか誤っているかを判断できる。
また、隣接する番号の入力間違いの検出ができる。
例えば、一部が「25」という順番の数値を「52」としてしまった場合、上の法則では10の倍数にならなくなる。(ただし、09を90とした場合は検出できないし、同じ数字が2つ連続する場合の間違いも10種類のうち4種類までは検出できる(22 ⇔ 55、33⇔ 66、44 ⇔ 77 は検出できない)。
これは、筆記での入力間違いを検出しやすくメリットがある。

まとめ

今回のPayPayでも上記の法則が利用されたかも・・・しれない。というか、ISOで公表されているし、パブリックドメインでもあるから、この手の話は基本事項だっただろう。
ちなみに、ISO/IEC 7812は、クレジットカード番号だけでなく銀行の番号や多くのカードで採用されている規格であるので、Luhaアルゴリズムで確認できる番号も多々あることだろうから、豆知識として覚えておくといいかもしれない。

コメント

このブログの人気の投稿

リモートワークをLogicoolのマウスとキーボードで複数PC切り替えて優勝した

VBAでのInterfaceやキャスト

SUPERHOTがいかにSUPERHOTか語りたい