PHP 身份证号验证函数


Posted in PHP onMay 07, 2009
function validation_filter_id_card($id_card) 
{ 
if(strlen($id_card) == 18) 
{ 
return idcard_checksum18($id_card); 
} 
elseif((strlen($id_card) == 15)) 
{ 
$id_card = idcard_15to18($id_card); 
return idcard_checksum18($id_card); 
} 
else 
{ 
return false; 
} 
} 
// 计算身份证校验码,根据国家标准GB 11643-1999 
function idcard_verify_number($idcard_base) 
{ 
if(strlen($idcard_base) != 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($idcard_base); $i++) 
{ 
$checksum += substr($idcard_base, $i, 1) * $factor[$i]; 
} 
$mod = $checksum % 11; 
$verify_number = $verify_number_list[$mod]; 
return $verify_number; 
} 
// 将15位身份证升级到18位 
function idcard_15to18($idcard){ 
if (strlen($idcard) != 15){ 
return false; 
}else{ 
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 
if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){ 
$idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9); 
}else{ 
$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9); 
} 
} 
$idcard = $idcard . idcard_verify_number($idcard); 
return $idcard; 
} 
// 18位身份证校验码有效性检查 
function idcard_checksum18($idcard){ 
if (strlen($idcard) != 18){ return false; } 
$idcard_base = substr($idcard, 0, 17); 
if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){ 
return false; 
}else{ 
return true; 
} 
}
PHP 相关文章推荐
PHP.MVC的模板标签系统(二)
Sep 05 PHP
基于文本的留言簿
Oct 09 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
Yii rules常用规则示例
Mar 15 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP chop()函数讲解
Feb 11 PHP
php 购物车的例子
May 04 #PHP
PHP 错误之引号中使用变量
May 04 #PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 #PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 #PHP
PHP 读取文件的正确方法
Apr 29 #PHP
PHP session有效期问题
Apr 26 #PHP
PHP 判断常量,变量和函数是否存在
Apr 26 #PHP
You might like
对盗链说再见...
2006/10/09 PHP
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
jQuery图片轮播功能实例代码
2017/01/29 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
Python构造函数及解构函数介绍
2015/02/26 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
python清除函数占用的内存方法
2018/06/25 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
ktv总经理岗位职责
2014/02/17 职场文书
工程项目经理任命书
2014/06/05 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
关于Vue中的options选项
2022/03/22 Vue.js
Python中第三方库Faker的使用详解
2022/04/02 Python