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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php array_merge下进行数组合并的代码
Jul 22 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
php获取post中的json数据的实现方法
Jun 08 PHP
php密码生成类实例
Sep 24 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
php 猴子摘桃的算法
Jun 20 PHP
php实例化一个类的具体方法
Sep 19 PHP
php swoft框架实例用法
Dec 22 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/02/06 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Pandas之缺失数据的实现
2021/01/06 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
工作交流会欢迎词
2014/01/12 职场文书
党员自我剖析材料
2014/08/31 职场文书
电影圆明园观后感
2015/06/03 职场文书
居安思危观后感
2015/06/11 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers