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 和 MySQL 基础教程(四)
Oct 09 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
PHP扩展开发入门教程
Feb 26 PHP
php操作MongoDB类实例
Jun 17 PHP
php语言的7种基本的排序方法
Dec 28 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
php TP5框架生成二维码链接
Apr 01 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实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
Python常用的爬虫技巧总结
2016/03/28 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python初步实现word2vec操作
2020/06/09 Python
Python pymsql模块的使用
2020/09/07 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
模具专业求职信
2014/06/26 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
财务人员个人工作总结
2015/02/27 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
刑事撤诉申请书
2015/05/18 职场文书
python 镜像环境搭建总结
2022/09/23 Python