PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kreditkartencheck???


Christoph
14.08.2002, 16:39:01
Hey Damir,

leider funktioniert das Script nicht.
Ich habe mir ein paar Nummer besorgt und alles getestet bis zum
Umfallen aber nichts geht.

Ich habe auch versucht "mein" Script mit den Bedingungen aus deinem umzuschreiben aber leider keinen Erfolg erzielt.

Kennt sich einer mit den Suchmustern bei Strings aus für DinersClub müssen folgende Bedingungen erfüllt werden:

Länge 14, erste Zahl 3 zweite Zahl 0 oder 6 oder 8

Für JBC, Länge 16 und die ersten vier Zahlen müssen sein
3088 oder 3096 oder 3112 oder 3158 oder 3357 oder 3528 oder 1800 oder 2131

bitte helft mir,ich stehe kurz vor einem Anfall :)

|Coding
14.08.2002, 16:51:40
hmmm, wenn es so viele verschiedene suchmuster gibt, musst du dann nicht auch das script so schreiben das es das liesst...

Christoph_H
14.08.2002, 17:41:12
<?
function validateCC($ccnum, $type = ''){
// Eingabe von Leerzeichen befreien
$type = strtolower($type);
$ccnum = preg_replace( '/[-[:space:]]/', '', $ccnum);
if (strlen($ccnum) == 0) return FALSE;
// Test des Kartentyps
switch ($type) {
case '':
break;
case 'visa':
if (strlen($ccnum) != 13 and strlen($ccnum) != 16
or substr($ccnum, 0, 1) != "4") {
return FALSE;
}
break;
case 'jbc':
if (strlen($ccnum) != 16 || substr($ccnum,0,4) != '3088' & substr($ccnum,0,4) != '3096'){
return FALSE;
}
break;
case 'diner':
if (strlen($ccnum) != 14 || substr($ccnum,0,1) == '3') {
return FALSE;
}
break;
case 'mastercard':
if (strlen($ccnum) != 16 || !preg_match('/^5[1-5]/', $ccnum)) {
return FALSE;
}
break;
case 'amex':
if (strlen($ccnum) != 15 || !preg_match('/^3[47]/', $ccnum)) {
return FALSE;
}
break;
case 'discover':
if (strlen($ccnum) != 16 || substr($ccnum,0,4) == '6011') {
return FALSE;
}
break;
default:
return FALSE;
}
// Starte MOD 10-Tests
$dig = CharToArray($ccnum);
$numdig = sizeof($dig);
for ($i=($numdig-2), $j=0 ; $i>=0; $i-=2, $j++) {
$dbl[$j] = $dig[$i] * 2;
}
$dblsz = sizeof($dbl);
$validate = 0;
for ($i=0; $i<$dblsz; $i++) {
$add = CharToArray($dbl[$i]);
for ($j=0; $j<sizeof($add); $j++) {
$validate += $add[$j];
}
$add = '';
}
for ($i=($numdig-1); $i>=0; $i-=2){
$validate += $dig[$i];
}
if (substr($validate, -1, 1) == '0')
return TRUE;
else
return FALSE;
}

// Diese Funktion gibt eine Zeichenkette als Array zurück
function CharToArray($input) {
$char = preg_split('//', $input);
array_pop($char);
array_shift($char);
return ($char);
}
echo 'Prüfe "' . $ccnumber . '"<br>';
echo validateCC($ccnumber, $cctype) ? 'Nummer ist gültig' : 'Nummer ist nicht gültig';
?>
<form action=<?echo" "$PHP_SELF"";?> method="post">
Nummer zu Prüfen: <input type="Text" maxlength="20" name="ccnumber">
<select name="cctype">
<option value="">- Wählen Sie den Kartentyp -
<option value="amex">American Express
<option value="visa">VISA
<option value="diner">Diners Club
<option value="jbc">JBC
<option value="mastercard">MasterCard
<option value="discover">Discover
</select>
<input type="Submit" value="Prüfen">
</form>



Natürlich muss ich es so schreiben das es das ließt, aber genau das ist mein Problem.Ich hab jetzt mit viel Mühe die Bedingungen ermittelt und habe versucht neue cases zu schreiben.Hat auch funktioniert aber bei mehr als drei || Bedingung hat er die vierte nicht mehr ausgeführt.
Also hab ich sie hier wieder entfernt.

Leider weiß jetzt nicht weiter, wie ich die Bedingungen noch einpflegen kann?

Christoph
15.08.2002, 09:25:26
Kann mir wirklich keiner helfen????

Progman
15.08.2002, 22:41:13
das ganze könnte man mit preg_match elegant lösen. Man muss nur wissen welche Zeichen wo sein müssen und so.