求一个能验证银行卡号的正则表达式 求一个能验证银行卡号的正则表达式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $str = '6228480402564890018'; preg_match('/([\d]{4})([\d]{4})([\d]{4})([\d]{4})([\d]{0,})?/', $str,$match); unset($match[0]); echo implode(' ', $match); 银行卡号一般15位或19位,第一位不为0吧$str = '6228480402564890018'; preg_match('/^([1-9]{1})(\d{14}|\d{18})$/', $str,$match); print_r($match[0]); //调用if($_POST['idcar']){ if($this->validation_filter_id_card($_POST['idcar'])){ $array['idcar']=$_POST['idcar']; }else{ echo json_encode(array('status'=>0,'msg'=>'身份证错误')); exit(); } }//身份证验证方法 function validation_filter_id_card($id_card){ if(strlen($id_card)==18){ return $this->idcard_checksum18($id_card); }elseif((strlen($id_card)==15)){ $id_card=$this->idcard_15to18($id_card); return $this->idcard_checksum18($id_card); }else{ return false; } }// 计算身份证校验码,根据国家标准GB 11643-1999 function idcard_verify_number($idcard_base){ if(strlen($idcard_base)!=17){ return false; } //加权因子 $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //校验码对应值 $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2'); $checksum=0; for($i=0;$i<strlen($idcard_base);$i++){ $checksum += substr($idcard_base,$i,1) * $factor[$i]; } $mod=$checksum % 11; $verify_number=$verify_number_list[$mod]; return $verify_number; }// 将15位身份证升级到18位 function idcard_15to18($idcard){ if(strlen($idcard)!=15){ return false; }else{ // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){ $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9); }else{ $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9); } } $idcard=$idcard.$this->idcard_verify_number($idcard); return $idcard; }// 18位身份证校验码有效性检查 function idcard_checksum18($idcard){ if(strlen($idcard)!=18){ return false; } $idcard_base=substr($idcard,0,17); if($this->idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){ return false; }else{ return true; } } framework入门问题 XAMPP中apache无法启动问题 PHP支持联盟②群:87768463 preg_replace 执行正则表达式的搜索和替换 求教程 用当前时间的微秒级做为唯一数在同一个文件夹下创建文件,有可能重复么? 通过URL传递图片参数 垃圾ASP设计的数据表,怎样转换 提交第二个表单后,保留第一个表单内容 高分求引用远程rss内容的代码 再问 sockest 如何 post 数据,请给详细代码 php获取自定义header里的参数 ecshop,wstmart和iwebshop,开源商城系统怎么选择
$str = '6228480402564890018';
preg_match('/([\d]{4})([\d]{4})([\d]{4})([\d]{4})([\d]{0,})?/', $str,$match);
unset($match[0]);
echo implode(' ', $match);
$str = '6228480402564890018';
preg_match('/^([1-9]{1})(\d{14}|\d{18})$/', $str,$match);
print_r($match[0]);
if($_POST['idcar']){
if($this->validation_filter_id_card($_POST['idcar'])){
$array['idcar']=$_POST['idcar'];
}else{
echo json_encode(array('status'=>0,'msg'=>'身份证错误'));
exit();
}
}
//身份证验证方法
function validation_filter_id_card($id_card){
if(strlen($id_card)==18){
return $this->idcard_checksum18($id_card);
}elseif((strlen($id_card)==15)){
$id_card=$this->idcard_15to18($id_card);
return $this->idcard_checksum18($id_card);
}else{
return false;
}
}
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
if(strlen($idcard_base)!=17){
return false;
}
//加权因子
$factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//校验码对应值
$verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
$checksum=0;
for($i=0;$i<strlen($idcard_base);$i++){
$checksum += substr($idcard_base,$i,1) * $factor[$i];
}
$mod=$checksum % 11;
$verify_number=$verify_number_list[$mod];
return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard){
if(strlen($idcard)!=15){
return false;
}else{
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){
$idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);
}else{
$idcard=substr($idcard,0,6).'19'.substr($idcard,6,9);
}
}
$idcard=$idcard.$this->idcard_verify_number($idcard);
return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
if(strlen($idcard)!=18){
return false;
}
$idcard_base=substr($idcard,0,17);
if($this->idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
return false;
}else{
return true;
}
}