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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
PHP个人网站架设连环讲(三)
Oct 09 PHP
关于mysql 字段的那个点为是定界符
Jan 15 PHP
php Try Catch异常测试
Mar 01 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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 文件上传功能实现代码
2009/06/24 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
js的写法基础分析
2011/01/17 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
详解Python字典的操作
2019/03/04 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
物流司机岗位职责
2013/12/28 职场文书
事业单位辞职信范文
2014/01/19 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
2014公司年终工作总结
2014/12/19 职场文书
行政复议答复书
2015/07/01 职场文书
医院病假条范文
2015/08/17 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书