php不用正则验证真假身份证


Posted in PHP onNovember 06, 2013

直接看代码吧,很简单的一个PHP类

<?php 

$IDCard = new IDCard(); 

var_dump($IDCard::isCard($_GET['card'])); 

  

/** 

 * 身份证处理类 

 */

class IDCard { 

  

    //检证身份证是否正确 

    public static function isCard($card) { 

        $card = self::to18Card($card); 

        if (strlen($card) != 18) { 

            return false; 

        } 

  

        $cardBase = substr($card, 0, 17); 

  

        return (self::getVerifyNum($cardBase) == strtoupper(substr($card, 17, 1))); 

    } 

  

  

    //格式化15位身份证号码为18位 

    public static function to18Card($card) { 

        $card = trim($card); 

  

        if (strlen($card) == 18) { 

            return $card; 

        } 

  

        if (strlen($card) != 15) { 

            return false; 

        } 

  

        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 

        if (array_search(substr($card, 12, 3), array('996', '997', '998', '999')) !== false) { 

            $card = substr($card, 0, 6) . '18' . substr($card, 6, 9); 

        } else { 

            $card = substr($card, 0, 6) . '19' . substr($card, 6, 9); 

        } 

        $card = $card . self::getVerifyNum($card); 

        return $card; 

    } 

  

    // 计算身份证校验码,根据国家标准gb 11643-1999 

    private static function getVerifyNum($cardBase) { 

        if (strlen($cardBase) != 17) { 

            return false; 

        } 

        // 加权因子 

        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 

  

        // 校验码对应值 

        $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 

  

        $checksum = 0; 

        for ($i = 0; $i < strlen($cardBase); $i++) { 

            $checksum += substr($cardBase, $i, 1) * $factor[$i]; 

        } 

  

        $mod = $checksum % 11; 

        $verify_number = $verify_number_list[$mod]; 

  

        return $verify_number; 

    } 

} 

?>  

另外,关于身份证号验证本站还提供了身份证归属地查询工具如下:

PHP 相关文章推荐
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
深入理解PHP中的global
Aug 19 PHP
php静态文件生成类实例分析
Jan 03 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
Laravel-admin之修改操作日志的方法
Sep 30 PHP
php 中文字符串首字母的获取函数分享
Nov 04 #PHP
PHP图片上传代码
Nov 04 #PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 #PHP
php Session存储到Redis的方法
Nov 04 #PHP
在PHP中使用redis
Nov 04 #PHP
6种php上传图片重命名的方法实例
Nov 04 #PHP
php preg_replace替换实例讲解
Nov 04 #PHP
You might like
一个PHP数组应该有多大的分析
2009/07/30 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
smarty缓存用法分析
2014/12/16 PHP
一个简单的php路由类
2016/05/29 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
微信小程序checkbox组件使用详解
2018/01/31 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python换行与不换行的输出实例
2020/02/19 Python
小学毕业家长寄语
2014/01/19 职场文书
大学自我评价
2014/02/12 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
班主任先进事迹材料
2014/12/17 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python