0

さまざまな種類のファイルからクレジット カード番号 (CCN) を検出できるアルゴリズムを作成したいと考えています。

CCN を見つける簡単なシナリオは、正規表現を定義どおりに使用することです。

  1. Visa:^4[0-9]{12}(?:[0-9]{3})?$すべての Visa カード番号は . で始まり 4ます。新しいカードは 16 桁です。古いカードは 13 です。
  2. MasterCard:^5[1-5][0-9]{14}$すべての MasterCard 番号は から までの数字で始まり51ます55。全部で16桁です。
  3. American Express: American Express カードの番号は、またはで^3[47][0-9]{13}$始まり、15 桁です。3437
  4. ダイナース クラブ:ダイナース クラブのカード番号は、 ~、または^3(?:0[0-5]|[68][0-9])[0-9]{11}$で始まります。全部で14桁です。で始まる16 桁のダイナース クラブ カードがあります。これらは Diners Club と MasterCard の共同事業であり、MasterCard のように処理する必要があります。30030536385
  5. Discover: Discover カードの番号はまたは^6(?:011|5[0-9]{2})[0-9]{12}$で始まります。全部で16桁です。601165
  6. JCB:^(?:2131|1800|35\d{3})\d{11}$で始まる JCB カードは 15 桁です21311800で始まるJCBカード35は16桁です。

次に、見つかった数を Luhn Mod-10 アルゴリズムで確認し、条件を満たしていれば、CCN を見つけたと言えます。

しかし、この単純な方法には、私の経験から非常に多くの誤検出/誤検出があります。

偽陽性/陰性の一致を減らすために、どのアルゴリズムまたはヒューリスティックを使用できますか? PCI Data Finder や Card Recon などの高度なソフトウェアは、より信頼性の高い結果を提供していますが、その結果は単純な正規表現の検索や Luhn チェックでは得られません。

4

1 に答える 1