參考博客:php
做者:selfimpr626
來源:CSDN (根據身份證號計算年齡,15位身份證號碼轉18位)
原文:https://blog.csdn.net/weixin_41888813/article/details/82457069spa
做者:iteye_11848
來源:CSDN (15位的身份證號轉爲18位).net
原文:https://blog.csdn.net/iteye_11848/article/details/81310676code
第一代身份證:15位身份證號碼的意義blog
1-2位省、自治區、直轄市代碼;
3-4位地級市、盟、自治州代碼;
5-6位縣、縣級市、區代碼;
7-12位出生年月日,好比670401表明1967年4月1日,這是和18位號碼的第一個區別;
13-15位爲順序號,其中15位男爲單數,女爲雙數;
與18位身份證號的第二個區別:沒有最後一位的校驗碼。get
第二代身份證:18位身份證號碼的意義
①前一、2位數字表示:所在省份的代碼,河南的省份代碼是41哦!
②第三、4位數字表示:所在城市的代碼;
③第五、6位數字表示:所在區縣的代碼;
④第7~14位數字表示:出生年、月、日;
⑤第1五、16位數字表示:所在地的派出所的代碼;
⑥第17位數字表示性別:奇數表示男性,偶數表示女性;
⑦第18位數字是校檢碼:也有的說是我的信息碼,通常是隨計算機隨機產生,用來檢驗身份證的正確性。校檢碼能夠是0~9的數字,有時也用x表示。博客
代碼示例:it
<?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); }