PHP實現15位身份證號轉18位


PHP實現15位身份證號轉18位


 

參考博客:

  作者:selfimpr626
  來源:CSDN (根據身份證號計算年齡,15位身份證號碼轉18位
  原文:https://blog.csdn.net/weixin_41888813/article/details/82457069

 

  作者:iteye_11848
  來源:CSDN (15位的身份證號轉為18位

  原文:https://blog.csdn.net/iteye_11848/article/details/81310676


 

第一代身份證:15位身份證號碼的意義

1-2位省、自治區、直轄市代碼; 
3-4位地級市、盟、自治州代碼; 
5-6位縣、縣級市、區代碼; 
7-12位出生年月日,比如670401代表1967年4月1日,這是和18位號碼的第一個區別; 
13-15位為順序號,其中15位男為單數,女為雙數; 
與18位身份證號的第二個區別:沒有最后一位的校驗碼。


 

第二代身份證:18位身份證號碼的意義
  ①前1、2位數字表示:所在省份的代碼,河南的省份代碼是41哦!
  ②第3、4位數字表示:所在城市的代碼;
  ③第5、6位數字表示:所在區縣的代碼;
  ④第7~14位數字表示:出生年、月、日;
  ⑤第15、16位數字表示:所在地的派出所的代碼;
  ⑥第17位數字表示性別:奇數表示男性,偶數表示女性;
  ⑦第18位數字是校檢碼:也有的說是個人信息碼,一般是隨計算機隨機產生,用來檢驗身份證的正確性。校檢碼可以是0~9的數字,有時也用x表示。


代碼示例:

<?php

function CardId15To18($card){
    $len = strlen($card);
    if($len == 18){
        return $card;
    }else if($len != 15){
        return false;
    }
    $result = array();

    for($i=0;$i<$len;$i++){
        if($i<=5){
            $result[$i] = intval($card[$i]);
        }else{
            //15位的年份是兩位數,18位的是4位數,留出2位
            $result[$i+2] = intval($card[$i]);
        }
    }
    //留出的2位,補充為年份,年份最后兩位小於17,年份為20XX,否則為19XX
    if(intval(substr($card,6,2)) <= 17){
        $result[6] = 2;
        $result[7] = 0;
    }else{
        $result[6] = 1;
        $result[7] = 9;
    }
    ksort($result);
    //計算最后一位
    //前十七位乘以系數[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
    $arrInt = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    
    $sum = 0;
    for($i=0;$i<17;$i++){
        $sum += $result[$i] * $arrInt[$i];
    }
    //對11求余,的余數 0 - 10 
    $rod = $sum % 11;
    //所得余數映射到對應數字即可
    $arrCh = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
    $result[17] = $arrCh[$rod];
    return implode('',$result);
}

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM