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函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
laravel 实现用户登录注销并限制功能
Oct 24 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
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python常用正则表达式符号浅析
2014/08/13 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
python实现支付宝转账接口
2019/05/07 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python遍历字典方式就实例详解
2019/12/28 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
Python类的继承super相关原理解析
2020/10/22 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
Java模拟试题
2014/11/10 面试题
国际贸易毕业生求职信
2014/07/20 职场文书
小学庆六一活动总结
2014/08/28 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
大班上学期个人总结
2015/02/13 职场文书
初中数学教学反思范文
2016/02/17 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL