クレジットカード番号は、各種ブランド(VISA/MASTERCARD/JCB/AMEXなど)によって異なる番号が付与されます。クレジットカード番号には、チェックデジットが含まれていて、正当性を確認することができます。
■ クレジットカード番号の体系
クレジットカード番号の体系は、国際標準規格(ISO/IEC 7812)で決められています。
最後の桁には、チャックデジットと呼ばれる数字が付与され、クレジットカード番号の正当性を確認できます。
・BIN(6桁)
発行者識別番号であり、ブランド(VISA/MASTERCARD/JCB/AMEXなど)毎に決められている値
・口座番号(最大12桁)
ブランド(VISA/MASTERCARD/JCB/AMEXなど)が付与する値
・チェックデジット(1桁)
決められたアルゴリズム(Luhnアルゴリズム)でチェックが正常となるために付与される値
ちなみに、クレジットのICカードの規格であるEMVでは、TLVのTAG 0x5Aがクレジットカード番号(PAN)となっています。
https://emvlab.org/emvtags/?number=5A
Name | Description | Source | Format | Template | Tag | Length | P/C |
---|---|---|---|---|---|---|---|
Application Primary Account Number (PAN) | Valid cardholder account number | ICC | cn var. up to 19 | 70 or 77 | 5A | 0–10 | primitive |
■ クレジットカード番号のチェックアルゴリズム
Luhnアルゴリズムを以下を参考にPythonでプログラミングしてみました。
https://ja.wikipedia.org/wiki/Luhn%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
クレジットカード番号からブランド名を取得するようにしています。
以下のクレジットカード番号のBINを判定しています。
テストのクレジットカード番号は、以下のPAYJPのものを使いました。
(ただし、一部、上記のBINの定義があとで追加されているようで、ブランド名が取得できないものもあります)
■ まとめ
チェックデジットがあるからといって、クレジットカード番号を安易にチェックすると、逆に、弊害となる場合もあり得ます。
100%、クレジットカード番号の最後に下位1桁をチェックデジットとして扱っているとは言えないからです。
確実に、チェックデジットを付与していると特定できるブランドだけで実施できるのであればよいですが、そうではない場合、チェックデジットを使ったクレジットカード番号のチェックは行わないのが無難です。
実際には、カード発行者側のシステムにおいて決済を実行する際に、 チェックデジットを使ったクレジットカード番号のチェック が実施されているものと考えられます。
ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい