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 数据库树的遍历方法
Feb 06 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php之Memcache学习笔记
Jun 17 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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 db类库进行数据库操作
2009/03/19 PHP
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
二级域名转向类
2006/11/09 Javascript
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
js实现登录与注册界面
2017/11/01 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
jQuery插件jsonview展示json数据
2018/05/26 jQuery
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
个人简历自荐信
2013/12/05 职场文书
社保转移委托书范本
2014/10/08 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
先进班集体申报材料
2014/12/26 职场文书
英语教师个人总结
2015/02/09 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL