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 相关文章推荐
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
PHP四种基本排序算法示例
Apr 09 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
PHP新手指南
Apr 01 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python 实现多维数组转向量
2019/11/30 Python
Django REST 异常处理详解
2020/07/15 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Django 实现图片上传和下载功能
2020/12/31 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
教师自我鉴定
2013/12/13 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python