概要
このドキュメントでは、特定のタイプのデータを検出する組み込みのコンテンツスキャンパターンであるスマートIDについて説明します。このリリースでは、クレジットカード番号、米国の社会保障番号、CUSIP番号、およびABAルーティング番号のスマートIDを実装します。
内部的には、スマート識別子は、候補文字列に一致する正規表現と、何らかの方法で候補文字列の一致をチェックする検証関数で構成されます。たとえば、クレジットカード番号の検証機能により、チェックディジットが正しいことを確認できます。
各スマート識別子の正規表現には、両端のワード境界アンカー('b')が含まれます。(これは、たとえば長い数字の文字列の中央で米国の社会保障番号が照合されるのを防ぎます)。 わかりやすくするため、次の説明では、これらの説明を省略しています。
正規表現によって見つかった部分文字列が検証されない場合があるため、スマート識別子の実装では一致に注意する必要があります。たとえば、フィルタは文字列9999 4321 9999 999 995 1234 5678 9000に対してクレジットカード番号をスキャンし、有効なクレジットカード番号4321 9999999999999999999999999999999999999999999999999999999999999999999999999999990を995では、単純な正規表現が可能な数値をスキャンしても、9999 4321 9999999と9995 1234 5678 9000が検出されます。
クレジットカード番号
クレジットカード番号は可変長カードタイプで始まり、その番号がVISA、MasterCard、AMEXなどを示し、チェックディジットで終わります。異なるカードタイプでは、番号全体で異なる番号が使用されますが、チェックディジットの計算はそれぞれのケースで同じです。
enRouteカードまたはJCBカードは一致しないことに注意してください。また、13桁のVISA番号は存在せず、当社の実装では一致しません。
16桁のクレジットカード番号は、次の正規表現のいずれかに一致します。
[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}
[0-9]{4}\.[0-9]{4}\.[0-9]{4}\.[0-9]{4}\.[0-9]{4}
[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4]
[0-9]{16}
プレフィックスは「4」、「51」 – 「55」、または「6011」です。
15桁のAMEX番号は、次の正規表現のいずれかに一致します。
[0-9]{4}-[0-9]{6}-[0-9]{5}
[0-9]{4}\.[0-9]{6}\.[0-9]{5}
[0-9]{4} [0-9]{6} [0-9]{5}
[0-9]{15}
許可されるプレフィックスは「34」または「37」です。
14桁のディナーズクラブ番号は、次の正規表現のいずれかに一致します。
[0-9]{4}-[0-9]{6}-[0-9]{4}
[0-9]{4}\.[0-9]{6}\.[0-9]{4}
[0-9]{4} [0-9]{6} [0-9]{4}
[0-9]{14}
許可されるプレフィックスは「300」 – 「305」、「36」、または「38」です。
正規表現は、特定のクレジットカード長に対して特定の数字グループを定義し、その数字の間に句読点がある場合は、全体で同じにする必要があることに注意してください。
クレジットカード番号の最後の数字は、Luhnアルゴリズムを使用して作成されたチェックディジットです。番号の右端から、2桁目ごとに2桁ずつ作業します。次に、結果の数字の個々の数字を加算します(2倍の数字と重複しない数字の両方)。 結果が10の倍数である場合、数値は有効です。
たとえば、数値1234 5678 9012 3456を指定すると、
1 2 3 4 5 6 7 8 9 0 1 2 3 5
ダブル:2 2 6 4 10 6 14 8 18 0 2 6 4 10 6
2 + 2 + 6 + 4 + 1 + 0 ... + 1 + 0 + 6を追加すると、64になります。これは10の倍数ではないため、数値は無効です。
番号1234 5678 9876 3333を指定します。
1 2 3 4 5 6 7 8 8 7 6 3 3 3
ダブル:2 2 6 4 10 6 14 8 18 8 14 6 3 6 3
2 + 2 + 6 + 6 + 4 + 1 + 0 ... + 6 + 3を追加すると、80となり、10の倍数になるため、この数値は有効です。
米国の社会保障番号
ソーシャルセキュリティ番号は、地理的に割り当てられた3桁のエリア番号、エリア内の特定の順序で割り当てられた2桁のグループ番号、連続して割り当てられた4桁のシリアル番号に分割されます。
実装では、次の正規表現を使用します。
[0-9]{3}-[0-9]{2}-[0-9]{4}
[0-9]{3}\.[0-9]{2}\.[0-9]{4}
[0-9]{3} [0-9]{2} [0-9]{4}
上記の式の例をいくつか示します。
555-55-5555
555.55.5555
555 55 5555
Social Security Administrationは、割り当てられたエリア/グループ番号のリストを管理します。SSN発行[3]。ただし、このドキュメントは定期的に変更されるため、検証に頼ることはできません。 検証関数は、3つのフィールドがすべてゼロではなく、最初の3桁が800未満であることを確認します(前の参照では制限として771を使用しますが、SSAには最初の3桁771と772の番号がすでに割り当てられています)。
(666で始まる番号は割り当てられず、987-65-4320 ~ 987-65-4329の範囲の番号はアドバタイジング用に予約されます。また、078-05-1120が最も誤用されたSSNです。その数字を例に使用した財布の会社の秘書の実際のSSNです)。
CUSIP番号
CUSIP(Committee on Uniform Security Identification Procedures)番号は、北米の各種の証券を識別する9つの英数字の識別子です。この数値は、発行者(会社など)を一意に識別する6文字の発行者番号と、特定のセキュリティを識別する2文字のサフィックスに分割されます。例:普通株式、優先株式、オプション対オプションと固定所得計器。
CUSIPスマート識別子コードは、次の正規表現を使用します。
[0-9]{3}[0-9a-zA-Z]{3} [0-9a-zA-Z]{2} [0-9]
[0-9]{3}[0-9a-zA-Z]{3}-[0-9a-zA-Z]{2}-[0-9]
[0-9]{3}[0-9a-zA-Z]{3}[0-9a-zA-Z]{2}[0-9]
検証機能は、クレジットカード番号に使用されるものと似ています。唯一の違いは、CUSIP番号の文字をA=10、B=11、...、Z=35を割り当てて数値に変換することです。
cusip.com Webサイトの例では、CUSIP番号392690 QT 3を使用しています。
3 9 2 6 9 0 Q T 3
文字の変換:3 9 2 6 9 0 26 29 3
ダブル:3 18 2 12 9 0 26 58 3
3 + 1 + 8 + 2 + 1 + 2 + 2 + ... + 5 + 8 + 3を追加すると、50が与えられます。これは10の倍数であるため、元の番号は有効でした。
ABAルーティング番号
ABA(American Banking Association)のルーティング番号は9桁の値です。最初の4桁は連邦準備銀行のルーティングシンボル、次の4桁は機関識別子、最後の1桁はチェックディジットです。
ABAルーティング番号スマート識別子コードは、次の正規表現を使用します。
[0-9]{4} [0-9]{4} [0-9]
[0-9]{4}-[0-9]{4}-[0-9]
[0-9]{9}
検証機能は、各桁に3、7、1、...を掛けることに関係します。;製品の合計が10の倍数である場合、その数は有効です。
たとえば、123 456 789という数字を使用します。
1 2 3 4 5 6 7 8 9
乗算:3 7 1 3 7 1 3 7 1
Product:3 14 3 12 35 6 21 56 9
3 + 14 + 3 + 12 + 35 + 6 + 21 + 56 + 9を追加すると、159が返されます。これは10の倍数ではないため、元の番号は無効でした。
数値322 271 627を指定します。
3 2 2 7 1 6 2 7
乗算:3 7 1 3 7 1 3 7 1
Product:9 14 2 6 49 18 14 7
9 + 14 + 2 + 6 + 49 + 1 + 18 + 14 + 7を追加すると、120が返されます。これは10の倍数であるため、元の番号は有効でした。
(特定の範囲のFederal Reserveルーティングシンボルが予約されているため、割り当てられませんが、ABAがポリシーを変更した場合に修正する必要がないように、検証アルゴリズムは予約番号をチェックしません)。