スポンサードサーチ

以前、ECサイトの決済テストに使えるクレジットカードのテスト用カード番号という記事をアップしました。

ECサイトの構築をしている際にはテスト用の番号があるのは便利ですが、実際の運用が始まった時に、不正なカード番号を入力されるのも避けたいところ。

そこで、今回はカード番号が入力された時に、システム側でクレジットカード番号が正しいかを判別する方法について見ていきたいと思います。

クレジットカード番号は先頭6桁でカード発行会社がわかる

クレジットカード番号には一定の法則があり、これはISO/IEC 7812で決められています。

Wikipedia:ISO/IEC 7812

このWikipedia:ISO/IEC 7812で定められている番号は、発行者識別番号(IIN:Issuer Identifier Number)や銀行識別番号(BIN:Bank Identification Number)と呼ばれる先頭6桁、個々の口座番号、1桁のチェックサムで構成されています。

また、クレジットカードの桁数は、各ブランド毎に以下のようになっています。

カードブランド表示桁数合計桁数
VISA、MasterCard、JCB4桁 4桁 4桁 4桁16桁
American Express4桁 6桁 5桁15桁
Diners Club4桁 6桁 4桁14桁

主要産業識別子(MII:Major industry identifier)

発行者識別番号(IIN:Issuer Identifier Number)や銀行識別番号(BIN:Bank Identification Number)と呼ばれる先頭6桁の中の1桁目、主要産業識別子(MII:Major industry identifier)と呼ばれるカード発行者の業界を表しています。

MII値産業
0ISO予約値
1航空
2航空 / その他将来発生する産業
3旅行・娯楽/銀行・金融
4銀行・金融
5銀行・金融
6運送 / 銀行・金融
7石油 / その他将来発生する産業
8ヘルスケア / 医療 / 通信 / その他将来発生する産業
9国毎に割り当て可能

この中で銀行・金融関連と定義されている先頭が「3」、「4」、「5」のクレジットカードが数多く発行されており、国際ブランド別としては以下のような決まりになっています。

カードブランド最初の1桁
JCB、American Express、Diners Club3
VISA4
MasterCard2か5
Discover、中国銀聯6

MasterCardは以前は「5」しかありませんでしたが、MasterCard:MasterCardの新カード番号体系の追加導入により、2017年7月以降から「2」で始まるクレジットカード番号のものが発行されるようになりました。

口座番号

クレジットカード番号の7桁目から最終2桁目まで、最大で12桁の数値が口座番号となっており、各カードブランドで利用されている口座番号は以下の桁数に割り当てられています。

カードブランド口座番号割り当て桁数
VISA、MasterCard、JCB7桁目~15桁目
American Express7桁目~14桁目
Diners Club7桁目~13桁目

クレジットカード番号の正当性チェック方法

クレジットカードの番号が正しいものかどうかは、Wikipedia:Luhnアルゴリズムでチェックすることができます。

方法としては以下の通り。

1.右端のチェックディジットを1番目として、偶数番目の桁を2倍にする。
2.2倍にしていない桁も含め、各数字の総和を求める(2倍にした桁が2桁になった場合は、それぞれを別々の数字として加える)。
3.この総和の下1桁が0なら(つまり、10で割り切れる場合)、この番号はLuhnアルゴリズムでは正しく、そうでない場合は正しくない。

これは数字の並びが正しいかをチェックするだけのロジックですので、そのクレジットカード番号が存在するかどうかとは全く別の話です。

しかし、見てきたようにカードブランド、桁数、Luhnアルゴリズムを使えば、入力されたクレジットカード番号か正しいものかどうかは、ある程度の判別ができるのです。

スポンサードサーチ