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 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
PHP加密解密类实例分析
Apr 20 PHP
php文件下载处理方法分析
Apr 22 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
Yii2主题(Theme)用法详解
Jul 23 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
零基础学Python(一)Python环境安装
2014/08/20 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
python pycharm的安装及其使用
2019/10/11 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
学生鉴定评语大全
2014/05/05 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
同意离婚答辩状
2015/05/22 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书