学院首页>网络编程>PHP>信用卡效验程序

信用卡效验程序

作者: 来源:不详 添加时间:2006-5-25 20:40:16
  <?php  

////////////////////////////////////////////////////  
////
// Credit card validation routine  //  
// May 15, 2000  //  
// By ariso//  
// validateCardCode($number[,$cardtype]) //  
////////////////////////////////////////////////////  


function validateCardCode($cardnumber, $cardtype =  'unknown')
{  
  //Clean up input  

 $cardtype = strtolower($cardtype);  
 $cardnumber = ereg_replace( '[-[:space:]]',  '',$cardnumber);

  //Do type specific checks  

 if ($cardtype ==  'unknown') {  
//Skip type specific checks  
 }  
 elseif ($cardtype ==  'mastercard'){  
  if (strlen($cardnumber) != 16 || !ereg( '5[1-5]', $cardnumber)) return 0;  
 }  
 elseif ($cardtype ==  'visa'){  
  if ((strlen($cardnumber) != 13 && strlen($cardnumber) != 16) || substr($cardnumber, 0, 1) !=  '4')  

return 0;  
 }  
 elseif ($cardtype ==  'amex'){  
  if (strlen($cardnumber) != 15 || !ereg( '3[47]', $cardnumber)) return a;  
 }  
 elseif ($cardtype ==  'discover'){  
  if (strlen($cardnumber) != 16 || substr($cardnumber, 0, 4) !=  '6011') return 0;  
 }  
 else {  
//invalid type entered  
  return -1;  
 }  


  // Start MOD 10 checks  

 $dig = toCharArray($cardnumber);  
 $numdig = sizeof ($dig);  
 $intIntJ = 0;  
 for ($intI=($numdig-2); $intI>=0; $intI-=2){  
  $dbl[$intIntJ] = $dig[$intI] * 2;  
  $intIntJ++;  
 }
 $dblsz = sizeof($dbl);  
 $validate =0;  
 for ($intI=0;$intI<$dblsz;$intI++){  
  $add = toCharArray($dbl[$intI]);  
  for ($intIntJ=0;$intIntJ<sizeof($add);$intIntJ++){  
$validate += $add[$intIntJ];  
  }  
 $add =  '';  
 }  
 for ($intI=($numdig-1); $intI>=0; $intI-=2){  
  $validate += $dig[$intI];
 }  
 if (substr($validate, -1, 1) ==  '0') return 1;  
 else return 0;  
}  


// takes a string and returns an array of characters  

function toCharArray($intInput){  
 $len = strlen($intInput);  
 for ($intIntJ=0;$intIntJ<$len;$intIntJ++){  
  $char[$intIntJ] = substr($intInput, $intIntJ, 1);
 }  
 return ($char);  
}  

?>
站内搜索