PHP实现登录验证码校验功能


Posted in PHP onMay 17, 2018

验证码的校验是利用PHP中的 SESSION功能来实现。

在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能。

session_start();

接下来我们用到的就是验证码实现的代码。这里用英文数字的代码为例。

$image = imagecreatetruecolor(100, 30); //创建一个100×30的画布
$white = imagecolorallocate($image,255,255,255);//白色
imagefill($image,0,0,$white);//覆盖黑色画布

然后在验证码实现之前声明一个空变量,用来存放验证码。

$session = ""; //空变量 ,存放验证码
for($i=0;$i<4;$i++){
 $size = 6;
 $x = $i*25+mt_rand(5,10);
 $y = mt_rand(5,10);
 $sizi_color = imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220));
 $char = join("",array_merge(range('a','z'),range('A','Z'),range(0,9)));
 $char = str_shuffle($char);
 $char = substr($char,0,1);
 imagestring($image,$size,$x,$y,$char,$sizi_color);
 $session .= $char ; //把验证码的每一个值赋值给变量
}
 $_SESSION['session'] = $session; //这个变量的值与用户输入的值相等

for($k=0;$k<200;$k++){
 $rand_color = imagecolorallocate($image,mt_rand(50,200),mt_rand(50,200),mt_rand(50,200));
 imagesetpixel($image,mt_rand(1,99),mt_rand(1,29),$rand_color);
}
for($n=0;$n<5;$n++){
 $line_color = imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220));
 imageline($image,mt_rand(1,99),mt_rand(1,29),mt_rand(1,99),mt_rand(1,29),$line_color);
}
header('content-type:image/png');//设置文件输出格式
imagepng( $image ); //以png格式输出$image图像
imagedestroy( $image ); //销毁图像

用 POST 方式来接收验证码。 strtolower 函数是让服务器不区分大小写。这样可以有效减少用户的输错率。

if(isset($_POST['session'])){
 session_start();
 if(strtolower($_POST['session'])==strtolower($_SESSION['session'])){
  echo'<font color="#0000CC">输入正确</form>';
 }else{
  echo '<font color="#CC0000"><b>输入错误</b></font>';
 }
 exit();
}

下面是HTML的页面代码。

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8"/>
 <title>确认验证码</title>
</head>
<body>
 <form method="post" action="./tushu.php">
 <p>验证码图片:<img id="img" border="1" src="http://localhost//xxx.php" width="100" height="30"></p>
 <a href="javascript:void(0)" rel="external nofollow"  onclick="document.getElementById('img').src='http://localhost//xxx.php'">看不清?换一个</a>
 <p>请输入图片中的验证码:<input type="text" name="session" value=""/></p>
 <p><input type="submit" value="提交" style="padding:6px 10px;"></p>
 </form>
</body>
</html>

总结

以上所述是小编给大家介绍的PHP实现登录验证码校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
真正面向对象编程:PHP5.01发布
Oct 09 PHP
PHP 表单提交给自己
Jul 24 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 #PHP
php通过各种函数判断0和空
Jul 04 #PHP
PHP手机短信验证码实现流程详解
May 17 #PHP
PHP实现多图上传和单图上传功能
May 17 #PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 #PHP
PHP多维数组指定多字段排序的示例代码
May 16 #PHP
php strftime函数获取日期时间(switch用法)
May 16 #PHP
You might like
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
js+div实现图片滚动效果代码
2014/02/10 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
青年创业培训欢迎词
2014/01/08 职场文书
平面设计专业求职信
2014/08/09 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
Python实现归一化算法详情
2022/03/18 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技