php根据身份证号获取年龄优化版

来源:博客园 分类: 文章浏览史 发布时间:2021-02-23 18:06:54 最后更新:2021-02-23 浏览:350
转载声明:
本文为摘录自“博客园”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2021-02-23 18:06:54
复制代码
function  toAge($idCard){
    if(empty($idCard)) return '';
    //获取当前年份;
    $now_year   = date('Y');

    //获取当前年份月份;
    $now_month  = substr(date('m'),0,1)=='0'  ? substr(date('m'),-1) : date('m');

    //获取当前日期;
    $now_day    = substr(date('d'),0,1)=='0'  ? substr(date('d'),-1) : date('d');

  if(strlen($idCard)==18){ //18位身份证号;
      //获取身份证号对应的年,月份,日期;
     $card_year  = substr($idCard,6,4);

     //获取身份证号对应月份
     $card_month = substr($idCard,10,2);
     $card_month = substr($card_month,0,1)=='0' ? substr($card_month,-1): $card_month;
    
     //获取身份证号对应日期;
     $card_day   = substr($idCard,12,2);
     $card_day   = substr($card_day,0,1)=='0' ? substr($card_day,-1): $card_day;
     }else{  //15位身份证号;
        //获取身份证号对应的年,月份,日期;
     $card_year  = '19'.substr($idCard,6,2);

     //获取身份证号对应月份
     $card_month = substr($idCard,8,2);
     $card_month = substr($card_month,0,1)=='0' ? substr($card_month,-1): $card_month;
    
     //获取身份证号对应日期;
     $card_day   = substr($idCard,10,2);
     $card_day   = substr($card_day,0,1)=='0' ? substr($card_day,-1): $card_day;
    }
    //获取当前年份和身份证年份之差;
    $age        = $now_year - $card_year;

    $realAge = 0;

    if($now_month == $card_month){
            
        //比较日期;
        if($now_day >= $card_day){
           $realAge =  $age;
        }else{
           $realAge =  $age -1;        
        }
    }elseif($now_month > $card_month){
            $realAge    =  $age;
    }else{
        $realAge    =  $age -1 ;
    }
    return  $realAge;
} 
复制代码

 

php技术微信