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 相关文章推荐
在普通HTTP上安全地传输密码
Jul 21 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
PHP中require和include路径问题详解
Dec 25 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
详解Laravel服务容器的绑定与解析
Nov 05 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简单浏览目录内容的实现代码
2013/06/07 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
PHP数组实例详解
2016/06/26 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
vue脚手架及vue-router基本使用
2018/04/09 Javascript
js动态引入的四种方法
2018/05/05 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
js实现简单的秒表
2020/01/16 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
python对日志进行处理的实例代码
2018/10/06 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
PHP开发的一般流程
2013/08/13 面试题
监察建议书格式
2014/05/19 职场文书
煤矿安全生产标语
2014/06/06 职场文书
授权委托书范文
2014/07/31 职场文书
科学发展观活动总结
2014/08/28 职场文书
2015试用期转正工作总结
2014/12/12 职场文书