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伪静态页面函数附使用方法
Jun 20 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
PHP实现图片上传并压缩
Dec 22 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
分享php邮件管理器源码
Jan 06 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
PHP7内核之Reference详解
Mar 14 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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
php正则
2006/07/07 PHP
3
2006/10/09 PHP
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php使用websocket示例详解
2014/03/12 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
jquery移动节点实例
2015/01/14 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python实现解数独程序代码
2017/04/12 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python3中zip()函数使用详解
2018/06/29 Python
python的launcher用法知识点总结
2020/08/07 Python
Python通过format函数格式化显示值
2020/10/17 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
交通事故私了协议书
2014/04/16 职场文书
实践单位评语
2014/04/26 职场文书
舞蹈专业求职信
2014/06/13 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
关于感谢信的范文
2015/01/23 职场文书
专家推荐信怎么写
2015/03/25 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS