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调用三种数据库的方法(2)
Oct 09 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
Session保存到数据库的php类分享
Oct 24 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
php获取文件大小的方法
Feb 26 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
PHP处理Ajax请求与Ajax跨域问题
Feb 13 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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
SONY ICF-F10中波修复记
2021/03/02 无线电
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
PHP 读取和编写 XML
2014/11/19 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
KMP算法精解及其Python版的代码示例
2016/06/01 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
假面舞会策划方案
2014/05/29 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
培训计划通知
2015/07/15 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js