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
phpMyAdmin链接MySql错误 个人解决方案
Dec 28 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
php去除二维数组的重复项方法
Nov 03 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
PHP 文件上传限制问题
Sep 01 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
Python实现批量下载图片的方法
2015/07/08 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
python requests.post带head和body的实例
2019/01/02 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
深入浅析Python中的迭代器
2019/06/04 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
生物制药自我鉴定
2014/01/25 职场文书
中药学自荐信
2014/06/15 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
Django实现drf搜索过滤和排序过滤
2021/06/21 Python