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项目开发中最常用的自定义函数整理
Dec 02 PHP
php提示undefined index的几种解决方法
May 21 PHP
基于php iconv函数的使用详解
Jun 09 PHP
PHP的PSR规范中文版
Sep 28 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
php简单实现数组分页的方法
Apr 30 PHP
php字符集转换
Jan 23 PHP
PHP构造二叉树算法示例
Jun 21 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 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在Web开发领域的优势
2006/10/09 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
thinkphp分页集成实例
2017/07/24 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
React简单介绍
2017/05/24 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
python select.select模块通信全过程解析
2017/09/20 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python实现抢购IPhone手机
2018/02/07 Python
python实现树形打印目录结构
2018/03/29 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
工程管理专业个人求职信范文
2013/12/07 职场文书
校园安全演讲稿
2014/05/09 职场文书
2014年租房协议书范本
2014/10/30 职场文书