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 SQL Injection with MySQL
Feb 27 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
PHP程序员基本要求和必备技能
May 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php读取csv文件并输出的方法
Mar 14 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
php桥接模式应用案例分析
Oct 23 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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批量生成随机用户名
2008/07/10 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
Yii2如何批量添加数据
2016/05/17 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
python issubclass 和 isinstance函数
2019/07/25 Python
使用pandas读取文件的实现
2019/07/31 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
《姥姥的剪纸》教学反思
2014/02/25 职场文书
出生公证书样本
2014/04/04 职场文书
二人合伙经营协议书
2014/09/13 职场文书
死亡证明书样本说明
2014/10/18 职场文书
研究生导师评语
2014/12/31 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
golang interface判断为空nil的实现代码
2021/04/24 Golang