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 相关文章推荐
Windows下安装Memcached的步骤说明
Apr 25 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP读取xml方法介绍
Jan 12 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php文件上传的两种实现方法
Apr 04 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP中多字节字符串操作实例详解
Aug 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
php数组查找函数总结
2014/11/18 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
PHP自定义错误用法示例
2016/09/28 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
有模特经验的简历自我评价
2013/09/19 职场文书
运动会四百米广播稿
2014/01/19 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
基层党组织整改方案
2014/10/25 职场文书
给领导的感谢信范文
2015/01/23 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
工作收入证明模板
2015/06/12 职场文书
严以用权学习心得体会
2016/01/12 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL