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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
php 验证码制作(网树注释思想)
Jul 20 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 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
在字符串中把网址改成超级链接
2006/10/09 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
JavaScript window.location对象
2014/11/14 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
python实现发送和获取手机短信验证码
2016/01/15 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
经贸日语专业个人求职信
2013/12/13 职场文书
心得体会怎么写
2013/12/30 职场文书
大学生学习自我评价
2014/01/13 职场文书
四年大学自我鉴定
2014/02/17 职场文书
大学生个人学习总结
2015/02/15 职场文书
求职信范文怎么写
2015/03/19 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
2016年敬老月活动总结
2016/04/05 职场文书