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程序设计有所帮助。