クレジットカード番号のみに基づいてクレジットカードの種類を検出する方法を見つけようとしています。これを見つけるための確実で信頼できる方法をご存知の方はいらっしゃいますか?
ベストアンサー1
クレジット/デビットカード番号は、 PAN(Primary Account Number)と呼ばれます。PANの最初の6桁は、発行銀行に属するIIN(Issuer Identification Number)から取得されます(IINは以前はBIN(Bank Identification Number)と呼ばれていたため、一部の文書ではその用語が参照されている場合があります)。これらの6桁は国際標準に準拠しており、ISO/IEC 7812、数字からカードの種類を判別することができます。
残念ながら、実際のISO/IEC 7812データベースは公開されていませんが、商用と無料の両方の非公式リストがあり、その中には次のようなものがあります。ウィキペディアで。
とにかく、数字から型を検出するには、以下のような正規表現を使用できます。オリジナル表現のクレジット
Visa: ^4[0-9]{6,}$
Visa カード番号は 4 で始まります。
MasterCard: ^5[1-5][0-9]{5,}|222[1-9][0-9]{3,}|22[3-9][0-9]{4,}|2[3-6][0-9]{5,}|27[01][0-9]{4,}|2720[0-9]{3,}$
2016 年より前、MasterCard 番号は 51 から 55 で始まりますが、これによって検出されるのは MasterCard クレジットカードのみです。この IIN 範囲に該当しない、MasterCard システムを使用して発行された他のカードもあります。2016 年には、範囲 (222100-272099) の番号が追加されます。
American Express: ^3[47][0-9]{5,}$
American Express カード番号は 34 または 37 で始まります。
ダイナースクラブ: ^3(?:0[0-5]|[68][0-9])[0-9]{4,}$
ダイナースクラブのカード番号は、300 から 305、36、または 38 で始まります。5 で始まり 16 桁のダイナースクラブ カードもあります。これらはダイナースクラブとマスターカードの合弁事業であり、マスターカードと同様に処理されます。
Discover: ^6(?:011|5[0-9]{2})[0-9]{3,}$
Discover カード番号は 6011 または 65 で始まります。
JCB: ^(?:2131|1800|35[0-9]{3})[0-9]{3,}$
JCB カードは 2131、1800、または 35 で始まります。
残念ながら、MasterCard システムで処理されるカードの種類の中には、MasterCard の IIN 範囲 (51...55 で始まる番号) に含まれないカードが多数あります。最も重要なケースは Maestro カードで、その多くは他の銀行の IIN 範囲から発行されているため、番号空間全体に広がっています。そのため、受け入れる他のタイプではないカードはすべて MasterCard であると想定するのが最善です。
重要: カード番号の長さはさまざまです。たとえば、Visa は過去に 13 桁の PAN を持つカードと 16 桁の PAN を持つカードを発行しました。Visa のドキュメントには、現在 12 桁から 19 桁の番号を発行する可能性がある、または発行したことがあると記載されています。したがって、カード番号の長さを確認する必要はありません。ただし、少なくとも 7 桁(完全な IIN と 1 つのチェック ディジット) であることを確認してください。これは、ルーンアルゴリズム)。
もう1つのヒント:カード所有者のPANを処理する前に、入力から空白と句読点を削除します。なぜでしょうか?実際のクレジットカードの表面に表示されているように、数字をグループで入力する方がはるかに簡単だからです。
4444 4444 4444 4444
正しく入力するのははるかに簡単です
4444444444444444
ここで予期しない文字を入力したからといって、ユーザーを叱責してもまったくメリットはありません。
これは、入力フィールドに少なくとも24 文字分のスペースがあることを確認することも意味します。そうしないと、スペースを入力するユーザーがスペースを使い果たしてしまいます。フィールドを 32 文字を表示できる幅にし、最大 64 文字まで入力できるようにすることをお勧めします。これにより、拡張に十分な余裕が生まれます。
もう少し詳しい説明がわかる画像がこちらにあります:
更新(2016年):マスターカードは、新しいBIN範囲を実装する予定です。ACH支払い。