当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现15位身份证号转18位的方法分析

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-05 15:01:43 浏览: 评论:0 

这篇文章主要介绍了PHP实现15位身份证号转18位的方法,结合实例形式分析了15位身份证号转18位的相关原理与php实现技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现15位身份证号转18位的方法,分享给大家供大家参考,具体如下:

第一代身份证: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表示。

代码示例:

  1. <?php 
  2. function CardId15To18($card){ 
  3.   $len = strlen($card); 
  4.   if($len == 18){ 
  5.     return $card
  6.   }else if($len != 15){ 
  7.     return false; 
  8.   } 
  9.   $result = array(); 
  10.   for($i=0;$i<$len;$i++){ 
  11.     if($i<=5){ 
  12.       $result[$i] = intval($card[$i]); 
  13.     }else
  14.       //15位的年份是两位数,18位的是4位数,留出2位 
  15.       $result[$i+2] = intval($card[$i]); 
  16.     } 
  17.   } 
  18.   //留出的2位,补充为年份,年份最后两位小于17,年份为20XX,否则为19XX 
  19.   if(intval(substr($card,6,2)) <= 17){ 
  20.     $result[6] = 2; 
  21.     $result[7] = 0; 
  22.   }else
  23.     $result[6] = 1; 
  24.     $result[7] = 9; 
  25.   } 
  26.   ksort($result); 
  27.   //计算最后一位 
  28.   //前十七位乘以系数[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2], 
  29.   $arrInt = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 
  30.   $sum = 0; 
  31.   for($i=0;$i<17;$i++){ 
  32.     $sum += $result[$i] * $arrInt[$i]; 
  33.   } 
  34.   //对11求余,的余数 0 - 10  
  35.   $rod = $sum % 11; 
  36.   //所得余数映射到对应数字即可 
  37.   $arrCh = array('1''0''X''9''8''7''6''5''4''3''2');  
  38.   $result[17] = $arrCh[$rod]; 
  39.   return implode('',$result); 
  40. }

Tags: PHP15位身份证号转18

分享到: