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

PayPayの騒動を見て疑問に思ったTipsのような話。
クレジットカード番号はどうやって決まるのか?
- 多くは16桁の番号。ただし、14桁や15桁のクレジットカード番号もある
- 最初の6桁は、BIN(Bank Identification Number, 銀行識別番号)またはIIN(Issuer Identification Number, 発行者識別番号)と呼ばれ、カードのイシュア(発行事業者)を特定する。
- 例えば、
- American Expressなら、冒頭34, 37
- ちなみに、15桁
- Visaは、冒頭4
- Master Cardは、510000 - 559999, 222100 - 272099の間の数値
- 参考元:Wikipedia クレジットカードの番号
- 残りの部分は、イシュアが決める。
- ただし、多くのクレジットカード番号会社では、番号の入力間違いの検知などをチェックするため、番号の決定にLuhnアルゴリズム(ルーンアルゴリズム)を採用している。
- そして、最終桁はチェック・ディジットになる。
- なお、これはISO/IEC 7812に規定されている
ISO/IEC 7812 - ウィキペディア
Luhnアルゴリズムとは
- 様々な識別番号の認証に使われている単純なチェックサム方式
- IBMの科学者 Hans Peter Luhn が1954年1月6日に特許を申請し、1960年8月23日に発効した
- アルゴリズムはパブリックドメインになっている。
- ISO/IEC 7812-1[2] に詳細に記されている。
- 参考:Luhnアルゴリズム - Wikipedia
調べると興味深いが、整理すると3つの工程を踏む
- チェックデジット(最終桁)を除く数値を決定する
- 仮に 1234 5678 9012 345X とする。(Xは、チェックデジット)
- チェックデジットを含んで右から偶数桁を2倍にする。ただし、2桁の場合はそれぞれの桁を分ける。(本が6ならば、12なので1+2)とする。それ以外はそのままとして、それらの総和を出す
- 偶数桁 2 + 6 + ( 1+0 ) + (1+4) + (1+8) + 2 + 6 + (1+0)
- 奇数桁 2 + 4 + 6 + 8 + 0 + 2 + 4
- 上の総和は、58
- 10の倍数になるように、チェックデジットを求める。
- 直近の10の倍数だと、60なので、60-58=2
- 最終的には、 1234 5678 9012 3452 という数値が決定される
これは、逆に言うと、手持ちのクレジットカード番号を2番めの法則に基づいて計算すると、必ず10の倍数になるということを意味している。
なぜLuhaアルゴリズムを使うのか
一つは、入力間違いをすぐに検知するためである。
多くのカードは、磁気カードであるのでスライドしたときに微妙に違う数値が出ることがある。その場合に、この計算式を使えば、正しいか誤っているかを判断できる。
また、隣接する番号の入力間違いの検出ができる。
例えば、一部が「25」という順番の数値を「52」としてしまった場合、上の法則では10の倍数にならなくなる。(ただし、09を90とした場合は検出できないし、同じ数字が2つ連続する場合の間違いも10種類のうち4種類までは検出できる(22 ⇔ 55、33⇔ 66、44 ⇔ 77 は検出できない)。
これは、筆記での入力間違いを検出しやすくメリットがある。
まとめ
今回のPayPayでも上記の法則が利用されたかも・・・しれない。というか、ISOで公表されているし、パブリックドメインでもあるから、この手の話は基本事項だっただろう。
コメント
コメントを投稿