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桌面中心(二) 数据库写入
Mar 11 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php析构函数的简单使用说明
Aug 24 PHP
php需登录的文件上传管理系统
Mar 21 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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/05/07 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
图片之间的切换
2006/06/26 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
Python 正则表达式的高级用法
2016/12/04 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
如何编写python的daemon程序
2021/01/07 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
中学生打架检讨书
2014/10/13 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2014年变电站工作总结
2014/12/19 职场文书
个园导游词
2015/02/04 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书