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 相关文章推荐
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
php递归遍历删除文件的方法
Apr 17 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
PHP进阶学习之反射基本概念与用法分析
Jun 18 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
超清晰的document对象详解
2007/02/27 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
python异步任务队列示例
2014/04/01 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
python中调试或排错的五种方法示例
2019/09/12 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
中专毕业生的自荐书
2014/07/01 职场文书
刑事申诉状范文
2015/05/20 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL