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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP INT类型在内存中占字节详解
Jul 20 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(6) 面向对象
2010/02/16 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
Vue2 模板template的四种写法总结
2018/02/23 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python 常用string函数详解
2016/05/30 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python获取地震信息 微信实时推送
2019/06/18 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
python中常见错误及解决方法
2020/06/21 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
开展创先争优活动总结
2014/08/28 职场文书
统招统分证明
2015/06/23 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书