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目录与文件操作
Dec 30 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php 伪静态之IIS篇
Jun 02 PHP
Laravel5中contracts详解
Mar 02 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP addslashes()函数讲解
Feb 03 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 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
php自动获取目录下的模板的代码
2010/08/08 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
async/await地狱该如何避免详解
2018/05/10 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python变量作用范围实例分析
2015/07/07 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
pygame实现五子棋游戏
2019/10/29 Python
Python xlwt模块使用代码实例
2020/06/10 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
公司营业员的自我评价
2014/03/04 职场文书
党员承诺书怎么写
2014/05/20 职场文书
泰山导游词
2015/02/02 职场文书
清明节寄语2015
2015/03/23 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
Linux中如何安装并部署Redis
2022/04/18 Servers
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript