信用卡效验程序

  <?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);

  }

  ?>