Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Kreditkartenüberprüfung mit ASP

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Eines der wichtigsten Dinge, die man für eine eCommerce Site benötigt ist die Validierung der eingegebenen Kreditkartennummern. Obwohl nicht jeder Shop online mit einem Payment Gateway zur sofortigen Abbuchung/Validierung verbunden ist, kann man sich dennoch gegen allzu groben Unfug bei der Kreditkartendateneingabe absichern.

Das Schöne an Kreditkartennummern ist, daß sie mathematisch in ihrer Gültigkeit berechenbar sind. Zusätzlich kann man aus der Nummer auch herausfinden, um welche Kreditkarte es sich handelt. Es gibt einige Komponenten (sehr viele davon teuer zu bezahlen), die einem diese Aufgabe abnehmen - wozu aber, wenn man es deutlich günstiger haben kann: gratis (aber nicht umsonst).

Ich möchte nicht behaupten, den Sourcecode zur Validierung erfunden zu haben - ich habe ihn auf der Entwicklerhomepage von Netscape gefunden (DevEdge - generell sehr empfehlenswert!). Es war ein Client-Side Code in JavaScript; ich habe die Funktionen für Kreditkartenvalidierung herausgeholt, und in eine Datei namens ccfuncs.asp verfrachtet.

Der Validierungscode in ccfuncs.asp

Die Datei ccfuncs.asp enthält alle Überprüfungsfunktionen. Es sind die originalen Client-Side JavaScript Funktionen, allerdings sind sie jetzt in einem serverseitigen SCRIPT Block für JScript eingeschlossen. Alle Funktionen sind gegenüber den Originalen unverändert.

Die folgende Tabelle beschreibt die Funktionen, die in ccfuncs.asp enthalten sind:

Funktion Beschreibung
isCreditCard (st) Liefert True wenn die Kartennummer den Luhn Mod-10 Test besteht.
isVisa (cc) Liefert True wenn es sich um eine VISA Karte handelt.
isMasterCard (cc) Liefert True wenn es sich um eine MasterCard handelt.
isAmericanExpress (cc) Liefert True wenn es sich um eine American Express Karte handelt.
isDinersClub (cc) Liefert True wenn es sich um eine Diner's Club Karte handelt.
isCarteBlanche (cc) Liefert True wenn es sich um eine Carte Blanche handelt.
isDiscover (cc) Liefert True wenn es sich um eine Discover Karte handelt.
isEnRoute (cc) Liefert True wenn es sich um eine enRoute Karte handelt.
isJCB (cc) Liefert True wenn es sich um eine JCB Karte handelt.
isAnyCard (cc) Liefert True wenn es sich um eine der aufgeführten Karten handelt.
isCardMatch (Type, Number) Liefert True wenn es sich bei Number um eine Karte von Type handelt.

Da man in ASP ja Funktionen, die in Sprache A geschrieben sind, von Code aus Sprache B aus aufrufen kann, war das auch schon der ganze Aufwand (Kurzversion: ich kann diese JScript Funktionen in normalen VBScript ASP Seiten verwenden).

Beispielkreditkarten

Zum Testen benötigt man eine Kreditkartennummer. Da ziemlich sicher niemand eine Kreditkarte jeder Marke besitzt, gibt es eine nette Liste von Testnummern, die man zum Überprüfen verwenden kann - auch mit tatsächlichen Payment Gateways:

KreditkarteTestnummer
Visa 4111 1111 1111 1111 
MasterCard 5500 0000 0000 0004 
American Express 3400 0000 0000 009 
Diner's Club 3000 0000 0000 04 
Carte Blanche 3000 0000 0000 04 
Discover 6011 0000 0000 0004 
JCB 3088 0000 0000 0009 

Überprüfen von Kreditkartendaten

So - nun haben wir den Überprüfungscode, sowie einige Kreditkarten zum Herumspielen - jetzt fehlt nur noch das Beispiel, das Kreditkartennummer auch wirklich überprüft.

Das folgende Beispiel ist mit Absicht einfach gehalten. Der Benutzer kann in einem Formular eine Kreditkartennummer eingeben, und diese wird dann am Server mit isCreditCard überprüft. Der Code für dieses Beispiel als auch ccfuncs.asp ist im Download dieses Artikels enthalten.

<!-- #include file="ccfuncs.asp" -->
<html>
<head>
	<title>Kreditkartenüberprüfung</title>
</head>
<body bgcolor="#ffffff">
<%
strCC = Request.QueryString("cc")
If "" = strCC Then strCC = "4111111111111111"
%>
<h2>Kreditkartencheck in ASP</h2>
<form method="get" action="<%=Request.ServerVariables("SCRIPT_NAME")%>">
<input type="text" name="cc" value="<%=strCC%>">&nbsp;
<input type="submit" value="Überprüfen!">
</form>
<%
If "" <> strCC Then
	' wir haben eine Kreditkarte zum Überprüfen erhalten...
	If Not isCreditCard(strCC) Then
		Response.Write "Sorry, mit der Karte <b>" & strCC & _
			"</b> können Sie nicht zahlen!"
	Else
		Response.Write "Die Kreditkarte ist OK!"
	End If
End If
%>
</body>
</html>

Der präsentierte Code in dieser ASP Seite ist VBScript, und dieser VBScript Code ruft die in JScript geschriebene Kreditkartenvalidierungsfunktion isCreditCard auf. Dieser einfache Aufruf reicht, um sagen zu können, ob eine Kreditkarte oberflächlich - von der Nummer her - OK ist. Man könnte nun auch noch den Typ der Karte überprüfen - um zu sehen, ob der Kunde die richtige Art ausgewählt hatte.

Wichtig ist, daß die Kreditkartenvalidierungsfunktionen Nummern erwarten, die keine Leerzeichen beeinhalten (sonst werden auch gültige Karten als falsch deklariert). Um diese "Kleinigkeit" muß man sich vorher noch selbst kümmern - entweder indem man einen Fehler ausgibt, wenn man ein Leerzeichen findet, oder still und leise alle Leerzeichen löscht. Ich persönlich würde zu erster Vorgangsweise tendieren.

Schlußbemerkung

Ich möchte an dieser Stelle nochmals betonen, daß die Überprüfung, wie sie in diesem Artikel präsentiert wurde, nur die Plausibilität der Nummer kontrolliert (das aber 100%ig). Ob die Karte tatsächlich ausgeben wurde, oder wie es um die Bonität des Besitzers steht, kann nur ein Payment Gateway beantworten.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000628.zip

Verwandte Artikel

Keine gefakten Bestellungen mehr!
http:/www.aspheute.com/artikel/20010531.htm

Links zu anderen Sites

JavaScript Form Validation Sample Code
http://developer.netscape.com/docs/examples/javascript/formval/overview.html

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.