You can use regex to test if the entered string matches credit card formats and then if it matches a specific bank identification.
To answer the question, reggae can send the match found to a specific method. This one could analyse the match and check if the digits are correct now that you know the bank issuer.
But, I strongly recommend thinking twice before store cards information. You must use encryption, even in your datastore, using a strong algorithm and store the encryption key elsewhere !!!
Some Explanation found on the web:
- Visa:
^4[0-9]{12}(?:[0-9]{3})?$
All Visa card numbers start with a 4. New cards have 16 digits. Old cards have 13.
- MasterCard:
^5[1-5][0-9]{14}$
All MasterCard numbers start with the numbers 51 through 55. All have 16 digits.
- American Express:
^3[47][0-9]{13}$
American Express card numbers start with 34 or 37 and have 15 digits.
- Diners Club:
^3(?:0[0-5]|[68][0-9])[0-9]{11}$
Diners Club card numbers begin with 300 through 305, 36 or 38. All have 14 digits. There are Diners Club cards that begin with 5 and have 16 digits. These are a joint venture between Diners Club and MasterCard, and should be processed like a MasterCard.
- Discover:
^6(?:011|5[0-9]{2})[0-9]{12}$
Discover card numbers begin with 6011 or 65. All have 16 digits.
- JCB:
^(?:2131|1800|35\d{3})\d{11}$
JCB cards beginning with 2131 or 1800 have 15 digits. JCB cards beginning with 35 have 16 digits.
it then renders:
?:4[0-9]{12}(?:[0-9]{3})? # Visa
| 5[1-5][0-9]{14} # MasterCard
| 3[47][0-9]{13} # American Express
| 3(?:0[0-5]|[68][0-9])[0-9]{11} # Diners Club
| 6(?:011|5[0-9]{2})[0-9]{12} # Discover
| (?:2131|1800|35\d{3})\d{11} # JCB
)$
Credits: