1. ホーム
  2. algorithm

[解決済み] クレジットカードの番号からカードの種類を判別する方法は?

2022-03-17 21:10:35

質問

クレジットカードの番号だけで、カードの種類を判別する方法を考えています。誰かこれを見つける決定的で信頼できる方法を知っていますか?

どのように解決するのですか?

クレジットカード/デビットカードの番号は、以下のように呼ばれます。 PAN または プライマリー・アカウント・ナンバー . PANの最初の6ケタは IIN または 発行体識別番号 IINは以前はBIN(Bank Identification Numbers)と呼ばれていたため、一部の文書ではその用語が使われていることがあります)。 この6桁の数字は、国際標準に従ったものです。 ISO/IEC 7812 この番号から、カードの種類を判別することができます。

残念ながら実際のISO/IEC 7812データベースは公開されていませんが、以下のような非公式のリストが商用・フリー問わず存在します。 ウィキペディア .

とにかく、数字から種類を判別するには、以下のような正規表現を使えばいい。 オリジナル表現へのクレジット

ビザです。 ^4[0-9]{6,}$ Visaのカード番号は4から始まります。

マスターカード ^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範囲に含まれないものもあります。 2016年には、(222100-272099)の範囲の番号が追加される予定です。

アメリカン・エキスプレス ^3[47][0-9]{5,}$ アメリカン・エキスプレスのカード番号は、34または37で始まります。

ダイナースクラブ ^3(?:0[0-5]|[68][0-9])[0-9]{4,}$ ダイナースクラブのカード番号は、300から305、36、38で始まります。5から始まる16桁のダイナースクラブカードもあります。ダイナースクラブとマスターカードのジョイントベンチャーであり、マスターカードと同様に処理される必要があります。

ディスカバー ^6(?:011|5[0-9]{2})[0-9]{3,}$ ディスカバーのカード番号は、6011または65で始まります。

JCBです。 ^(?:2131|1800|35[0-9]{3})[0-9]{3,}$ JCBカードは2131、1800、35で始まる。

残念ながら、MasterCardのシステムで処理されるカードには、MasterCardのIIN範囲(51~55で始まる番号)に含まれないものが多数あります。最も重要なケースはMaestroカードで、その多くは他の銀行のIIN範囲から発行されているため、番号空間の至るところに配置されています。 その結果 他の種類のカードでないものは、すべてマスターカードであると考えたほうがよいでしょう。 .

重要 例えば、Visaは過去に13桁のPAN番号のカードと16桁のPAN番号のカードを発行したことがあります。 Visaの資料によると、現在、12桁から19桁の番号を発行する、または発行した可能性があるとのことです。 したがって、カード番号の長さは、少なくとも7桁であることを確認する以外には、確認しない方がよいでしょう (完全なIINと1つのチェックデジットを加えたもの。 Luhnアルゴリズム ).

さらにヒントをひとつ。 カード会員の PAN を処理する前に、入力から空白文字と句読点を取り除きます。 . なぜか? それは、通常 大いに 実際のクレジットカードの表面に表示されているのと同じように、数字をグループ化して入力するのが簡単です。

4444 4444 4444 4444

よりもはるかに簡単に正しく入力することができます。

4444444444444444

ここで想定外の文字が入力されたからといって、ユーザーを非難するメリットはありません。

このことは、入力フィールドに 少なくとも 24文字でないと、ユーザーがスペースを入力する際にスペースが足りなくなります。 32文字を表示できるようにフィールドの幅を広くし、64文字まで表示できるようにすると、拡張のための十分なスペースができますね。

もう少し詳しくわかる画像はこちらです。

UPDATE(2016年)。 Mastercardは、新しいBINレンジを開始する予定です。 アッ支払 .