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 相关文章推荐
深入了解php4(1)--回到未来
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
php输出图像的方法实例分析
Feb 16 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 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
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
Python求出0~100以内的所有素数
2018/01/23 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
结构和类有什么异同
2012/07/16 面试题
十岁生日父母答谢词
2014/01/18 职场文书
中学生差生评语
2014/01/30 职场文书
初一家长会邀请函
2014/01/31 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js