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 相关文章推荐
PHP文件上传实例详解!!!
Jan 02 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
php类的定义与继承用法实例
Jul 07 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 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
实用函数7
2007/11/08 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
python实现从web抓取文档的方法
2014/09/26 Python
python服务器端收发请求的实现代码
2014/09/29 Python
获取Django项目的全部url方法详解
2017/10/26 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
自我评价200字分享
2013/12/17 职场文书
市场策划求职信
2014/08/07 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书