cu câteva expresii regulate simple, puteți verifica cu ușurință dacă clientul a introdus un număr de card de credit valid pe formularul de comandă. Puteți determina chiar și tipul de card de credit utilizat. Fiecare emitent de card are propria gamă de numere de card, identificate prin primele 4 cifre.
puteți utiliza o expresie regulată ușor diferită pentru a găsi numere de cărți de credit sau secvențe de numere care ar putea fi numere de cărți de credit, în documente mai mari. Acest lucru poate fi foarte util pentru a dovedi într-un audit de securitate că nu expuneți în mod necorespunzător detaliile financiare ale clienților dvs.
vom începe cu formularul de comandă.
spații de separare și liniuțe
primul pas este de a elimina toate non-cifre din numărul cardului introdus de client. Cardurile de credit fizice au spații în numărul cardului pentru a grupa cifrele, facilitând citirea sau tastarea oamenilor. Deci, formularul dvs. de comandă ar trebui să accepte numere de carduri cu spații sau liniuțe în ele.
pentru a elimina toate non-cifre din numărul cardului, pur și simplu utilizați funcția „înlocuiți toate” în limba de scripting pentru a căuta regex + și înlocuiți-l cu nimic. Dacă doriți doar să înlocuiți spațiile și liniuțele, puteți utiliza +. Dacă acest regex pare ciudat, amintiți-vă că într-o clasă de caractere, cratima este literală atunci când apare chiar înainte de paranteza de închidere (sau imediat după paranteza de deschidere sau careul de negare).
dacă vă întrebați pentru ce este plusul: acesta este pentru performanță. Dacă intrarea are non-cifre consecutive, cum ar fi 1===2, atunci + se potrivește cu cele trei semne egale simultan și le șterge într-un singur înlocuitor. Fără plus, ar fi necesare trei înlocuiri. În acest caz, economiile sunt doar câteva microsecunde. Dar este un obicei bun să păstrezi eficiența regex în spatele minții tale. Deși economiile sunt minime aici, la fel și efortul de a tasta plusul suplimentar.
validarea numere de card de Credit pe formularul de comandă
validarea numere de card de credit este locul de muncă ideal pentru expresii regulate. Sunt doar o secvență de 13 până la 16 cifre, cu câteva cifre specifice la început care identifică emitentul cardului. Puteți utiliza expresiile regulate specifice de mai jos pentru a alerta clienții atunci când încearcă să utilizeze un fel de card pe care nu îl acceptați sau pentru a direcționa comenzile folosind carduri diferite către procesoare diferite. Toate aceste regexuri au fost luate din biblioteca lui RegexBuddy.
- viză: ^4{12}(?:{3})?$ Toate numerele de card Visa începe cu un 4. Cardurile noi au 16 cifre. Cărțile vechi au 13.
- MasterCard: ^(?:5{2}|222|22|2{2}|27|2720){12}$ Numerele MasterCard încep fie cu numerele 51 până la 55, fie cu numerele 2221 până la 2720. Toate au 16 cifre.
- American Express: ^3{13} $ numerele cardurilor American Express încep cu 34 sau 37 și au 15 cifre.
- Diners Club: ^3(?: 0/) {11}$ numere de Card Diners Club începe cu 300 prin 305, 36 sau 38. Toate au 14 cifre. Există cărți Diners Club care încep cu 5 și au 16 cifre. Acestea sunt un joint-venture între Diners Club și MasterCard, și ar trebui să fie prelucrate ca un MasterCard.
- descoperiți: ^ 6(?:011/5{2}){12}$ descoperiți numere de card începe cu 6011 sau 65. Toate au 16 cifre.
- JCB: ^(?: 2131/1800/35\d{3}) \ D{11}$ cardurile JCB care încep cu 2131 sau 1800 au 15 cifre. Cardurile JCB care încep cu 35 au 16 cifre.
dacă doriți doar să verificați dacă numărul cardului pare valid, fără a determina marca, puteți combina cele șase regexuri de mai sus folosind alternanța. Un grup care nu captează pune ancorele în afara alternanței. Free-spacing permite comentarii și pentru regex pentru a se potrivi lățimea acestei pagini.
^(?:4{12}(?:{3})? # Visa
/ (?: 5{2} # MasterCard
| 222/22/2{2}|27|2720){12}
| 3{13} # American Express
/ 3 (?: 0/) {11} # Diners Club
/ 6 (?:011/5{2}){12} # descoperiți
/ (?: 2131/1800/35 \ d{3}) \ d{11} # JCB
)$
aceste expresii regulate vor prinde cu ușurință numere nevalide, deoarece clientul a introdus prea multe sau prea puține cifre. Nu vor prinde numere cu cifre incorecte. Pentru aceasta, trebuie să urmați algoritmul Luhn, care nu se poate face cu un regex. Și, desigur, chiar dacă numărul este valabil din punct de vedere matematic, asta nu înseamnă că a fost emis un card cu acest număr sau că există bani în cont. Beneficiul sau expresia regulată este că îl puteți pune într-un pic de JavaScript pentru a verifica instantaneu erorile evidente, în loc să faceți clientul să aștepte 30 de secunde pentru ca procesorul cardului dvs. de credit să eșueze comanda. Și dacă procesorul cardului dvs. percepe taxe pentru tranzacțiile eșuate, veți dori cu adevărat să implementați atât validarea regex, cât și validarea Luhn.
găsirea numerelor cărților de Credit în documente
cu două modificări simple, puteți utiliza oricare dintre regexurile de mai sus pentru a găsi numerele cărților în documente mai mari. Pur și simplu înlocuiți caret și dolar cu o limită cuvânt ca în \B4{12}(?:{3})?\ b.
dacă intenționați să căutați un server de documente mare, o expresie regulată mai simplă va accelera căutarea. Cu excepția cazului în care compania dvs. folosește numere de 16 cifre în alte scopuri, veți avea puține rezultate fals pozitive. Regexul \b \ d{13,16} \ b va găsi orice secvență de 13 până la 16 cifre.
când căutați un hard disk plin de fișiere, nu puteți elimina mai întâi spațiile și liniuțele, așa cum puteți face atunci când validați un singur număr de card. Pentru a găsi numere de carduri cu spații sau liniuțe în ele, utilizați \b (?: \d*?) {13,16} \ b. acest regex permite orice cantitate de spații și liniuțe oriunde în număr. Aceasta este într-adevăr singura cale. Visa și MasterCard pun cifre în seturi de 4, în timp ce Amex și Discover folosesc grupuri de 4, 5 și 6 cifre. Persoanele care introduc numerele pot avea încă idei diferite.
faceți o donație
v-a salvat acest site doar o excursie la librărie? Vă rugăm să faceți o donație pentru a sprijini acest site, și veți obține o viață de acces publicitar gratuit la acest site!