设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php验证身份证号码是不是正确函数

发布时间:2022-02-23 15:10 所属栏目:121 来源:互联网
导读:身份证验证最简单的就是判断长度了,当然这种非常简单破了如果要更规则一点我们需要对身份证号码进行一些按生成规则验证了,下面整理了一些函数我们来看看。 例子,今天分享一个php验证身份证号码是否正确函数. /********************php验证身份证号码是否正
  身份证验证最简单的就是判断长度了,当然这种非常简单破了如果要更规则一点我们需要对身份证号码进行一些按生成规则验证了,下面整理了一些函数我们来看看。
 
  例子,今天分享一个php验证身份证号码是否正确函数.
 
  /********************php验证身份证号码是否正确函数*********************/
  function is_idcard( $id )
  {
      $id = strtoupper($id);
      $regx = "/(^/d{15}$)|(^/d{17}([0-9]|X)$)/";
      $arr_split = array();
      if(!preg_match($regx, $id))
      {
          return FALSE;
      }
      if(15==strlen($id)) //检查15位
      {
          $regx = "/^(/d{6})+(/d{2})+(/d{2})+(/d{2})+(/d{3})$/";
  
          @preg_match($regx, $id, $arr_split);
          //检查生日日期是否正确
          $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
          if(!strtotime($dtm_birth))
          {
              return FALSE;
          } else {
              return TRUE;
          }
               $sign = 0;
              for ( $i = 0; $i < 17; $i++ )
              {
                  $b = (int) $id{$i};
                  $w = $arr_int[$i];
                  $sign += $b * $w;
              }
              $n  = $sign % 11;
              $val_num = $arr_ch[$n];
              if ($val_num != substr($id,17, 1))
              {
                  return FALSE;
              } //Cuoxin.com
              else
              {
                  return TRUE;
              }
          }
      }
  
  }
  /*调用身份证验证函数*/
  
  $idc=is_idcard("身份证号码");
  if($idc){echo "正确";}else{echo "错误";}
  例子二:
 
  function validation_filter_id_card($id_card){
   if(strlen($id_card)==18){
    return idcard_checksum18($id_card);
   }elseif((strlen($id_card)==15)){
    $id_card=idcard_15to18($id_card);
    return 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.idcard_verify_number($idcard);
   return $idcard;
  }
  // 18位身份证校验码有效性检查  
  function idcard_checksum18($idcard){
   if(strlen($idcard)!=18){
    return false;
   }
   $idcard_base=substr($idcard,0,17);
   if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
    return false;
   }else{
    return true;
   }
  }
  调用方法如:validation_filter_id_card('身份证号码');

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读