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 相关文章推荐
关于BIG5-HKSCS的解决方法
Mar 20 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
ThinkPHP之getField详解
Jun 20 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 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/06/07 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python深入学习之闭包
2014/08/31 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python之Socket网络编程详解
2016/09/29 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
什么是Web Service?
2012/07/25 面试题
12月红领巾广播稿
2014/02/13 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
MySQL创建管理子分区
2022/04/13 MySQL