PowerShell RE to match credit card patterns
I recently needed to come up with a credit card pattern that would match most credit card patterns including spaces and dashes.
I found a helpful post about PowerShell and credit card pattern matches that was a helpful starting point here: http://technet.microsoft.com/en-us/query/cc434704
I ended up with the following 2 patterns.
For Visa, MC and Discover:
“((4\d{3})|(5[1-5]\d{2})|(6011|65\d{2}))[-| ]*\d{4}[-| ]*\d{4}[-| ]*\d{4}$”
For AMEX:
“3[47]\d{2}[-| ]*\d{6}[-| ]*\d{5}$”
It is relevant to note that I needed to NOT have a space between the first ” and the first number. In addition, the $ was required so strings larger than the specified number were not matched. So for example, a string that was 18 digits starting with 4 would not be matched.
The actual PowerShell command I used was:
Get-ChildItem -rec -exclude *.exe,*.dll | select-string “3[47]\d{2}[-| ]*\d{6}[-| ]*\d{5}$”
I ran it in a test directory with files including VALID and INVALID credit card patterns.
Actual patterns that worked and didn’t block false positives.
“^3[47]\d{13}$” (no spaces)
^((4\d{3})|(5[1-5]\d{2})|(6011|65\d{2}))\d{12}$
^((4\d{3})|(5[1-5]\d{2})|(6011|65\d{2}))-\d{4}-\d{4}-\d{4}$
^((4\d{3})|(5[1-5]\d{2})|(6011|65\d{2})) \d{4} \d{4} ?\d{4}$