PHP 验证身份证是否合法的函数


Posted in PHP onFebruary 09, 2017

话不多说,请看代码:

function is_idcard( $id )
{
  $id = strtoupper($id);
  $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
  $arr_split = array();
  if(!preg_match($regx, $id))
  {
    return FALSE;
  }
  if(15==strlen($id)) //检查15位
  {
    $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
    @preg_match($regx, $id, $arr_split);
    //检查生日日期是否正确
    $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    if(!strtotime($dtm_birth))
    {
      return FALSE;
    }
    else
    {
      return TRUE;
    }
  }
  else //检查18位
  {
    $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
    @preg_match($regx, $id, $arr_split);
    $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    if(!strtotime($dtm_birth)) //检查生日日期是否正确
    {
      return FALSE;
    }
    else
    {
      //检验18位身份证的校验码是否正确。
      //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
      $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      $sign = 0;
      for ( $i = 0; $i < 17; $i++ )
      {
        $b = (int) $id{$i};
        $w = $arr_int[$i];
        $sign += $b * $w;
      }
      $n = $sign % 11;
      $val_num = $arr_ch[$n];
      if ($val_num != substr($id,17, 1))
      {
        return FALSE;
      }
      else
      {
        return TRUE;
      }
    }
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php中文本数据翻页(留言本翻页)
Oct 09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php SQL Injection with MySQL
Feb 27 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php获取汉字首字母的函数
Nov 07 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
php fread函数使用方法总结
May 28 PHP
php实现的数组转xml案例分析
Sep 28 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
如何打开php的gd2库
Feb 09 #PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 #PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 #PHP
使用php实现网站验证码功能【推荐】
Feb 09 #PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 #PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 #PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 #PHP
You might like
destoon二次开发常用数据库操作
2014/06/21 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
js实现随机数小游戏
2019/06/28 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
python conda操作方法
2019/09/11 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
科长竞争上岗演讲稿
2014/05/12 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
婚宴父亲致辞
2015/07/27 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
muduo TcpServer模块源码分析
2022/04/26 Redis
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL