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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
php a simple smtp class
Nov 26 PHP
php HandlerSocket的使用
May 02 PHP
PHP调用Webservice实例代码
Jul 29 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
详细分析PHP 命名空间(namespace)
Jun 30 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
CI框架中cookie的操作方法分析
2014/12/12 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python 忽略warning的输出方法
2018/10/18 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
视图的作用
2014/12/19 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
寄语学生的话
2014/04/10 职场文书
设计师求职信
2014/07/01 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
狮子林导游词
2015/02/03 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
民政局未婚证明
2015/06/15 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
mysql事务隔离级别详情
2021/10/24 MySQL