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 相关文章推荐
PHP:风雨欲来 路在何方?
Oct 09 PHP
我的论坛源代码(十)
Oct 09 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
PHP文件缓存类实现代码
Oct 26 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
PHP微信开发之有道翻译
Jun 23 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
php多任务程序实例解析
2014/07/19 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
python单元测试unittest实例详解
2015/05/11 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
Python画图高斯分布的示例
2019/07/10 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
华为慧通面试题
2012/09/11 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
军训学生自我鉴定
2014/02/12 职场文书
安全生产目标责任书
2014/04/14 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
python中的3种定义类方法
2021/11/27 Python
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android