파일에서 신용카드 숫자를 마스킹하는 정규식

파일에서 신용카드 숫자를 마스킹하는 정규식

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, 512345678901234,51234567890123455

발견하다: 6011123456789012, 6512345678901234, 601112345678901,60111234567890123

아메리칸 익스프레스: 341234567890123, 371234567890123, 34123456789012, 301234567890123, 3712345678901234

다이너스 클럽:37012345678901

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

가장 쉬운 찾기 및 교체는 무엇입니까?

답변1

*처음 10자리를 숫자가 정확히 14자리인 경우에만 바꾸는 방법은 다음과 같습니다.

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카드 패턴 목록에 없기 때문에 일치하지 않습니다.

관련 정보