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新手上路(五)
Oct 09 PHP
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
解决Laravel blade模板转义html标签的问题
Sep 03 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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中将汉字转换成拼音的函数代码
2012/09/08 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python显示进度条的方法
2014/09/20 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
什么是测试驱动开发(TDD)
2012/02/15 面试题
大学专科求职信
2014/07/02 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
通知格式
2015/04/27 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
会议营销主持词
2015/07/03 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
高中美术教学反思
2016/02/17 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
浅谈克隆 JavaScript
2021/11/02 Javascript