Mit ein paar einfachen regulären Ausdrücken können Sie ganz einfach überprüfen, ob Ihr Kunde eine gültige Kreditkartennummer in Ihr Bestellformular eingegeben hat. Sie können sogar die Art der verwendeten Kreditkarte bestimmen. Jeder Kartenaussteller hat seine eigenen Kartennummern, die durch die ersten 4 Ziffern gekennzeichnet sind.
Sie können einen etwas anderen regulären Ausdruck verwenden, um Kreditkartennummern oder Zahlenfolgen, die Kreditkartennummern sein könnten, in größeren Dokumenten zu finden. Dies kann sehr nützlich sein, um in einem Sicherheitsaudit nachzuweisen, dass Sie die finanziellen Details Ihrer Kunden nicht unsachgemäß offenlegen.
Wir beginnen mit dem Bestellformular.
Leerzeichen und Bindestriche entfernen
Der erste Schritt besteht darin, alle Nicht-Ziffern aus der vom Kunden eingegebenen Kartennummer zu entfernen. Physische Kreditkarten haben Leerzeichen innerhalb der Kartennummer, um die Ziffern zu gruppieren, was es für Menschen einfacher macht, zu lesen oder einzugeben. Daher sollte Ihr Bestellformular Kartennummern mit Leerzeichen oder Bindestrichen akzeptieren.
Um alle Nicht-Ziffern aus der Kartennummer zu entfernen, verwenden Sie einfach die Funktion „Alle ersetzen“ in Ihrer Skriptsprache, um nach dem regulären Ausdruck + zu suchen und ihn durch nichts zu ersetzen. Wenn Sie nur Leerzeichen und Bindestriche ersetzen möchten, können Sie + verwenden. Wenn dieser reguläre Ausdruck seltsam aussieht, denken Sie daran, dass der Bindestrich in einer Zeichenklasse ein Literal ist, wenn er direkt vor der schließenden Klammer (oder direkt nach der öffnenden Klammer oder dem negierenden Caret) auftritt.
Wenn Sie sich fragen, wofür das Plus ist: Das ist für die Leistung. Wenn die Eingabe aufeinanderfolgende Nicht-Ziffern hat, z. B. 1===2, stimmt + mit den drei Gleichheitszeichen gleichzeitig überein und löscht sie in einer Ersetzung. Ohne das Plus wären drei Ersetzungen erforderlich. In diesem Fall betragen die Einsparungen nur wenige Mikrosekunden. Aber es ist eine gute Angewohnheit, die Regex-Effizienz im Hinterkopf zu behalten. Obwohl die Einsparungen hier minimal sind, ist auch der Aufwand, das zusätzliche Plus einzugeben.
Validierung von Kreditkartennummern auf Ihrem Bestellformular
Die Validierung von Kreditkartennummern ist die ideale Aufgabe für reguläre Ausdrücke. Sie sind nur eine Folge von 13 bis 16 Ziffern, mit ein paar spezifischen Ziffern am Anfang, die den Kartenaussteller identifizieren. Sie können die unten angegebenen regulären Ausdrücke verwenden, um Kunden zu benachrichtigen, wenn sie versuchen, eine Karte zu verwenden, die Sie nicht akzeptieren, oder um Bestellungen mit verschiedenen Karten an verschiedene Prozessoren weiterzuleiten. Alle diese regulären Ausdrücke wurden aus der Bibliothek von RegexBuddy übernommen.
- Visum: ^4{12}(?:{3})?$ Alle Visa-Kartennummern beginnen mit einer 4. Neue Karten haben 16 Ziffern. Alte Karten haben 13.
- Fehler: ^(?:5{2}|222|22|2{2}|27|2720){12}$ MasterCard-Nummern beginnen entweder mit den Nummern 51 bis 55 oder mit den Nummern 2221 bis 2720. Alle haben 16 Ziffern.
- American Express: ^3{13} $ American Express Kartennummern beginnen mit 34 oder 37 und haben 15 Ziffern.
- Gäste-Klub: ^3(?:0/){11}$ Diners Club Kartennummern beginnen mit 300 bis 305, 36 oder 38. Alle haben 14 Ziffern. Es gibt Diners Club-Karten, die mit 5 beginnen und 16 Ziffern haben. Diese sind ein Joint Venture zwischen Diners Club und MasterCard und sollten wie eine MasterCard verarbeitet werden.
- Entdecken: ^6(?:011/5{2}){12}$ Discover-Kartennummern beginnen mit 6011 oder 65. Alle haben 16 Ziffern.
- JCB: ^(?:2131/1800/35\d{3})\d{11}$ JCB-Karten, die mit 2131 oder 1800 beginnen, haben 15 Ziffern. JCB-Karten, die mit 35 beginnen, haben 16 Ziffern.
Wenn Sie nur überprüfen möchten, ob die Kartennummer gültig ist, ohne die Marke zu bestimmen, können Sie die oben genannten sechs regulären Ausdrücke abwechselnd kombinieren. Eine nicht erfassende Gruppe setzt die Anker außerhalb des Wechsels. Mit freiem Abstand können Kommentare und der reguläre Ausdruck an die Breite dieser Seite angepasst werden.
^(?:4{12}(?:{3})? # Visum
| (?:5{2} # 1
| 222/22/2{2}|27|2720){12}
| 3{13} # American Express
/ 3(?:0/){11} # Diners Club
| 6(?:011/5{2}){12} # Entdecken
| (?:2131/1800/35\d{3})\d{11} # JCB
)$
Diese regulären Ausdrücke fangen leicht Zahlen ab, die ungültig sind, weil der Kunde zu viele oder zu wenige Ziffern eingegeben hat. Sie werden keine Zahlen mit falschen Ziffern fangen. Dazu müssen Sie dem Luhn-Algorithmus folgen, was mit einem regulären Ausdruck nicht möglich ist. Und selbst wenn die Nummer mathematisch gültig ist, bedeutet das natürlich nicht, dass eine Karte mit dieser Nummer ausgestellt wurde oder dass Geld auf dem Konto ist. Der Vorteil des regulären Ausdrucks besteht darin, dass Sie ihn in ein bisschen JavaScript einfügen können, um sofort nach offensichtlichen Fehlern zu suchen, anstatt den Kunden 30 Sekunden warten zu lassen, bis Ihr Kreditkartenprozessor die Bestellung fehlschlägt. Und wenn Ihr Kartenprozessor für fehlgeschlagene Transaktionen Gebühren erhebt, sollten Sie sowohl die Regex- als auch die Luhn-Validierung implementieren.
Kreditkartennummern in Dokumenten finden
Mit zwei einfachen Modifikationen können Sie einen der oben genannten regulären Ausdrücke verwenden, um Kartennummern in größeren Dokumenten zu finden. Ersetzen Sie einfach Caret und Dollar durch eine Wortgrenze wie in \b4{12}(?:{3})?\b.
Wenn Sie einen großen Dokumentenserver durchsuchen möchten, beschleunigt ein einfacherer regulärer Ausdruck die Suche. Wenn Ihr Unternehmen keine 16-stelligen Zahlen für andere Zwecke verwendet, haben Sie nur wenige Fehlalarme. Der reguläre Ausdruck \b\ d{13,16}\b findet eine beliebige Folge von 13 bis 16 Ziffern.
Wenn Sie eine Festplatte voller Dateien durchsuchen, können Sie Leerzeichen und Bindestriche nicht zuerst entfernen, wie Sie es bei der Validierung einer einzelnen Kartennummer tun können. Um Kartennummern mit Leerzeichen oder Bindestrichen zu finden, verwenden Sie \b(?:\d*?) {13,16}\b. Diese Regex erlaubt eine beliebige Anzahl von Leerzeichen und Bindestrichen an einer beliebigen Stelle in der Zahl. Das ist wirklich der einzige Weg. Visa und Mastercard setzen Ziffern in Sätzen von 4, während Amex und Discover verwenden Gruppen von 4, 5 und 6 Ziffern. Personen, die die Zahlen eingeben, haben möglicherweise noch andere Ideen.
Spenden Sie
Hat Ihnen diese Website gerade einen Ausflug in den Buchladen erspart? Bitte spenden Sie, um diese Website zu unterstützen, und Sie erhalten ein Leben lang werbefreien Zugang zu dieser Website!