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


Posted in PHP onOctober 16, 2019

本文实例讲述了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);
}

参考文章:https://3water.com/article/172059.htm

PHP 相关文章推荐
xajax写的留言本
Nov 25 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
基于php iconv函数的使用详解
Jun 09 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
PHP微信分享开发详解
Jan 14 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 #PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 #PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 #PHP
漂亮的thinkphp 跳转页封装示例
Oct 16 #PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 #PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 #PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 #PHP
You might like
global.php
2006/12/09 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
javascript replace方法与正则表达式
2008/02/19 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
JavaScript Split()方法
2015/12/18 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python 弧度与角度互转实例
2020/04/15 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
中专自我鉴定范文
2013/10/16 职场文书
外贸学院会计专业应届生求职信
2013/11/14 职场文书
北京英语导游词
2015/02/12 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android