public function check_bankno($bankno){
//判断长度
if(strlen($bankno)<16||strlen($bankno)>19){
return array(\'error\' => true, \'message\' =>\'银行卡号长度必须在16到19之间!\');
}
//判断是否数字
$preg_card=\'/^\d$))$\';
if(!preg_match($preg_card,$bankno)){
return array(\'error\' => true, \'message\' =>\'银行卡号必须全为数字!\');
}
//开头6位
$strBin="10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";
if(false===strpos(substr($bankno,0,2))){
return array(\'error\' => true, \'message\' =>\'银行卡号开头6位不符合规范!\');
}
$lastNum=substr($bankno,strlen($bankno)-1,1); //取出最后一位(与luhm进行比较)
$first15Num=substr($bankno,0,strlen($bankno));//前15或18位
$newArr=array();
for($i=strlen($first15Num)-1;$i>-1;$i--){
array_push($newArr,substr($first15Num,$i,1));
}
$arrJiShu=array(); //奇数位*2的积 <9
$arrJiShu2=array(); //奇数位*2的积 >9
$arrOuShu=array(); //偶数位数组
for($j=0;$j<count($newArr);$j++){
if(($j+1)%2==1){//奇数位
if($newArr[$j]*2<9){
array_push($arrJiShu,$newArr[$j]*2);
}else{
array_push($arrJiShu2,$newArr[$j]*2);
}
}else{//偶数位
array_push($arrOuShu,$newArr[$j]);
}
}
$jishu_child1=array();//奇数位*2 >9 的分割之后的数组个位数
$jishu_child2=array();//奇数位*2 >9 的分割之后的数组十位数
for($h=0;$h<count($arrJiShu2);$h++){
array_push($jishu_child1,$arrJiShu2[$h]%10);
array_push($jishu_child2,$arrJiShu2[$h]/10);
}
$sumJiShu=0; //奇数位*2 < 9 的数组之和
$sumOuShu=0; //偶数位数组之和
$sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
$sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
$sumTotal=0;
for($m=0;$m<count($arrJiShu);$m++){
$sumJiShu=$sumJiShu+(int)($arrJiShu[$m]);
}
for($n=0;$n<count($arrOuShu);$n++){
$sumOuShu=$sumOuShu+(int)($arrOuShu[$n]);
}
for($p=0;$p<count($jishu_child1);$p++){
$sumJiShuChild1=$sumJiShuChild1+(int)($jishu_child1[$p]);
$sumJiShuChild2=$sumJiShuChild2+(int)($jishu_child2[$p]);
}
//计算总和
$sumTotal=(int)($sumJiShu)+(int)($sumOuShu)+(int)($sumJiShuChild1)+(int)($sumJiShuChild2);
//计算Luhm值
$k= (int)($sumTotal)%10==0? 10:(int)($sumTotal)%10;
$luhm= 10-$k;
if($lastNum==$luhm){
return true;
}else{
return array(\'error\' => true, \'message\' =>\'银行卡校验失败!\');
return false;
}
}