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 开发环境配置(测试开发环境)
Apr 28 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
php实现评论回复删除功能
May 23 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
PHP中关于php.ini参数优化详解
Feb 28 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生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
基于javascript实现碰撞检测
2020/03/12 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python插入排序算法实例分析
2015/07/03 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
美国轮胎网站:Priority Tire
2018/11/28 全球购物
大学生职业生涯规划书参考模板
2014/03/05 职场文书
文化宣传方案
2014/03/13 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
高三英语教学计划
2015/01/23 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis