ファイル内のクレジットカード番号をマスクする正規表現

ファイル内のクレジットカード番号をマスクする正規表現

sedを使用してファイルからクレジットカード番号の最後の4桁を除くすべての番号をマスクする最も簡単な方法は何ですか?

egrepと次の正規表現を使用すると、Visa、Mastercard、Discover、American Express、Diner's Club、JCBの番号を見つけることができます。

egrep "(?:4[0-9]{12}(?:[0-9]{3})?|5[12345][0-9]{14}|3[47][0-9]{13}|3(?:0[012345]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35[0-9]{3})[0-9]{11})" transactions.log

このtransaction.logには他の重要な数字がある可能性があることに注意してください。その番号はタッチしないでください。クレジットカード番号ではありません。

クレジットカード番号形式の例:38012345678901 その他の数値形式の例:2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2

ビザ: 4123456789012, 4123456789012345,41234567890123456

マスターカード:5123456789012345、、、51234567890123451234567890123455

発見する: 6011123456789012, 6512345678901234, 601112345678901,60111234567890123

アメリカンエクスプレス:341234567890123、、、、301234567890123、371234567890123437123456789012334123456789012

ディナークラブ:37012345678901

JCB :213112345678901、、、、、、、、、、1800123456789013512345678901234​​​ ​ 21311234567890180012345678902131123456789012180012345678901235123456789012

最も簡単な検索と置換は何ですか?

ベストアンサー1

*数字が正確に14桁の場合にのみ、最初の10桁を数字に置き換えるには、次の手順を実行します。

sed 's/\([^0-9]\)[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'

例:

$ echo 'foo bar 38012345678901 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2, 
  28012345678901,,,,, 3801234567890123456789 stuff' | \
  sed 's/\([^0-9]\)[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'

foo bar **********8901 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2,
  **********8901,,,,, 3801234567890123456789 stuff

編集する

更新された例のパターンと正確に一致するには、次の手順を実行します。

sed 's/\([^0-9]\)4[0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)4[0-9]\{11\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)4[0-9]\{12\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{11\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)30[12345][0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{7\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)65[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)2131[0-9]\{6,8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)1800[0-9]\{6,8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)35[0-9]\{8,10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'

これは次のファイルで機能します。

Example of credit card number format: 38012345678901 

Visa: 4123456789012, 4123456789012345, 41234567890123456

MasterCard: 5123456789012345, 512345678901234, 51234567890123455

Discover: 6011123456789012, 6512345678901234, 601112345678901, 60111234567890123

American Express: 341234567890123, 371234567890123, 34123456789012, 301234567890123, 3712345678901234

Diner's Club: 37012345678901

JCB: 213112345678901, 180012345678901, 3512345678901234, 21311234567890, 18001234567890, ,2131123456789012, 1800123456789012, 35123456789012

Example of other numbers format: 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2

与えられた

Example of credit card number format: 38012345678901 

Visa: **********9012, **********2345, **********3456

MasterCard: **********2345, **********1234, **********3455

Discover: **********9012, **********1234, **********8901, **********0123

American Express: **********0123, **********0123, **********9012, **********0123, **********1234

Diner's Club: **********8901

JCB: **********8901, **********8901, **********1234, **********7890, **********7890, ,**********9012, **********9012, **********9012

Example of other numbers format: 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2

もちろん、最初の文字は38012345678901カードパターンリストに存在しないので一致しません。

おすすめ記事