PHP 身份验证方面的函数


Posted in PHP onOctober 11, 2009
<?php 
// 计算身份证校验码,根据国家标准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; 
} 
} 
?>

其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数
这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查
PHP 相关文章推荐
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
PHP滚动日志的代码实现
Jun 10 PHP
php轻松实现文件上传功能
Mar 03 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
PHP实现添加购物车功能
Mar 06 PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 #PHP
关于页面优化和伪静态
Oct 11 #PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 #PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 #PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 #PHP
PHP 日期时间函数的高级应用技巧
Oct 10 #PHP
PHP 日期加减的类,很不错
Oct 10 #PHP
You might like
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
收音机指标测试方法及仪器
2021/03/01 无线电
逆序二维数组插入一元素的php代码
2012/06/08 PHP
php防止sql注入代码实例
2013/12/18 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
JS正则中的RegExp对象对象
2012/11/07 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python多线程并发实例及其优化
2019/06/27 Python
Python版中国省市经纬度
2020/02/11 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
打架检讨书800字
2014/01/10 职场文书
人事专员岗位职责
2015/02/03 职场文书
中学推普周活动总结
2015/05/07 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript