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和ACCESS写聊天室(四)
Oct 09 PHP
php 生成WML页面方法详解
Aug 09 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
php取得字符串首字母的方法
Mar 25 PHP
php实现的任意进制互转类分享
Jul 07 PHP
PHP实现图片上传并压缩
Dec 22 PHP
php图形jpgraph操作实例分析
Feb 22 PHP
php批量删除操作代码分享
Feb 26 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 PHP
jQuery+PHP实现图片上传并提交功能
Jul 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 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
javascript版2048小游戏
2015/03/18 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
介绍一下游标
2012/01/10 面试题
通用C#笔试题附答案
2016/11/26 面试题
应届专科生个人的自我评价
2014/01/05 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
理发店策划方案
2014/06/05 职场文书
社会实践活动总结格式
2015/05/11 职场文书
教师培训学习心得体会
2016/01/21 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle