php实现用于验证所有类型的信用卡类
本文实例讲述了php实现用于验证所有类型的信用卡类。分享给大家供大家参考。具体如下:
这个php类比较完整,可以用于验证各种不同的信用卡,针对信用卡的卡号的通用规则进行了验证,同时对不同类型的信用卡进行了针对性的识别。
代码接受一个信用卡号码和有效日期,如果两者都有效,则返回TRUE,否则返回FALSE。
本插件接受以下参数:
$number表示信用卡号码的一个字符串
$expiry信用卡有效日期,采用07/12或0712这样的格式
<?php //Plug-in32:ValidateCreditCard //Thisisanexecutableexamplewithadditionalcodesupplied //Toobtainjusttheplug-inspleaseclickontheDownloadlink $card="4567123456789101"; $exp="06/11"; echo"Validating:$card:$exp<br>"; $result=PIPHP_ValidateCC($card,$exp); if($result!=FALSE)echo"CardValidated"; elseecho"Carddidnotvalidate"; functionPIPHP_ValidateCC($number,$expiry) { //Plug-in32:ValidateCreditCard // //Thisplug-inacceptsacreditcardnumberand //anexpirydateandreturnsTRUEorFALSE, //dependingonwhetherthedetailspassdate //andchecksumvalidation.Theargumentsrequired //are: // //$number:CreditCardNumber //$expiry:Expirydateintheform: //07/12or0712(forJuly,2012) $number=preg_replace('/[^\d]/','',$number); $expiry=preg_replace('/[^\d]/','',$expiry); $left=substr($number,0,4); $cclen=strlen($number); $chksum=0; //DinersClub if(($left>=3000)&&($left<=3059)|| ($left>=3600)&&($left<=3699)|| ($left>=3800)&&($left<=3889)) if($cclen!=14)returnFALSE; //JCB if(($left>=3088)&&($left<=3094)|| ($left>=3096)&&($left<=3102)|| ($left>=3112)&&($left<=3120)|| ($left>=3158)&&($left<=3159)|| ($left>=3337)&&($left<=3349)|| ($left>=3528)&&($left<=3589)) if($cclen!=16)returnFALSE; //AmericanExpress elseif(($left>=3400)&&($left<=3499)|| ($left>=3700)&&($left<=3799)) if($cclen!=15)returnFALSE; //CarteBlanche elseif(($left>=3890)&&($left<=3899)) if($cclen!=14)returnFALSE; //Visa elseif(($left>=4000)&&($left<=4999)) if($cclen!=13&&$cclen!=16)returnFALSE; //MasterCard elseif(($left>=5100)&&($left<=5599)) if($cclen!=16)returnFALSE; //AustralianBankCard elseif($left==5610) if($cclen!=16)returnFALSE; //Discover elseif($left==6011) if($cclen!=16)returnFALSE; //Unknown elsereturnFALSE; for($j=1-($cclen%2);$j<$cclen;$j+=2) $chksum+=substr($number,$j,1); for($j=$cclen%2;$j<$cclen;$j+=2) { $d=substr($number,$j,1)*2; $chksum+=$d<10?$d:$d-9; } if($chksum%10!=0)returnFALSE; if(mktime(0,0,0,substr($expiry,0,2),date("t"), substr($expiry,2,2))<time())returnFALSE; returnTRUE; } ?>
希望本文所述对大家的php程序设计有所帮助。