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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
用mysql内存表来代替php session的类
Feb 01 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
Yii2如何批量添加数据
May 17 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP 日常开发小技巧
2009/09/23 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
js word表格动态添加代码
2010/06/07 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
从django的中间件直接返回请求的方法
2018/05/30 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
英语道歉信范文
2014/01/09 职场文书
学生宿舍管理制度
2014/01/30 职场文书
《泉水》教学反思
2014/04/11 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
美术课外活动总结
2014/07/08 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
介绍信如何写
2015/01/31 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python