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表示。
代码示例:
- <?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);
- }
Tags: PHP15位身份证号转18
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)