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的FTP学习(二)
Oct 09 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php curl post 时出现的问题解决
Jan 30 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
laravel5.1框架model类查询的实现方法
Oct 08 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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Python之pymysql的使用小结
2019/07/01 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
python selenium xpath定位操作
2020/09/01 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
体育专业个人求职信范文
2013/12/27 职场文书
大学生创业感言
2014/01/25 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
校本课程教学计划
2015/01/19 职场文书
三十年同学聚会感言
2015/07/30 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
给学校的建议书400字
2015/09/14 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL