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作的文本留言本的例子(六)
Oct 09 PHP
在WIN98下以apache模块方式安装php
Oct 09 PHP
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
如何使用php实现评委评分器
Jul 31 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 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删除数组中特定元素的两种方法
2013/07/02 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
瑜伽国际:Yoga International
2018/04/18 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
企业内控岗位的职责
2014/02/07 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
武当山导游词
2015/02/03 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
MySQL优化及索引解析
2022/03/17 MySQL
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers