使用php实现网站验证码功能【推荐】


Posted in PHP onFebruary 09, 2017

验证码是网站常用的一项安全措施,也是新人站长较难掌握的一项技能,这里我向大家介绍一简单有效的验证码实现方法。

开始之前

在正式开始之前我们需要打开php的gd2图形库支持(在php.ini,中搜索“php_gd2.dll”,找到“;extension=php_gd2.dll”并去掉句首的分号) 。

可以参考:如何打开php的gd2库

核心:img.php

这个页面生成一张验证码并将正确数值写入 Session

随机一个4位验证码

$check=rand(1000,9999); 

将生成的验证码写入session

Session_start(); 
$_SESSION["check"] = $check;

创建一张图片

$im = imagecreate(80,30);

由于这种图片的背景默认是黑色的所以我们要用白色填充。

imagefill($im,0,0,ImageColorAllocate($im, 255,255,255)); 

使用imageline随机绘制两条实线

$y1=rand(0,30); 
$y2=rand(0,30); 
$y3=rand(0,30); 
$y4=rand(0,30); 
imageline($im,0,$y1,70, $y3,000); 
imageline($im,0,$y2,70, $y4,000);

在随机位置绘制文字

$strx=rand(3,15); 
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10));

输出图像

Header("Content-type: image/PNG"); 
ImagePNG($img);

结束,下面是完整代码

<?php $check=rand(1000,9999);
Session_start(); 
$_SESSION["check"] = $check; 
$img = imagecreate(80,30); 
imagefill($img,0,0,ImageColorAllocate($img,255,255,255)); 
$y1=rand(0,30); 
$y2=rand(0,30); 
$y3=rand(0,30); 
$y4=rand(0,30); 
imageline($img,0,$y1,70, $y3,ImageColorAllocate($img,55,255,25)); 
imageline($img,0,$y2,70, $y4,ImageColorAllocate($img,55,55,255)); 
$strx=rand(3,15); 
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10)); 
Header("Content-type: image/PNG"); 
ImagePNG($img);

用户界面:index.php

想必大家都知道怎么做,我就直接给出代码了

<!DOCTYPE html>
<html>
<body>
<form action="action.php" method="post">
<input type="text" name="cikle" placeholder="验证码">
<br>
<img id="cikle" style="-webkit-user-select: none" src="img.php"><input type="submit" value="Submit">
</form> 
</body>
</html>

以上的代码将用户输入的数值传递到“action.php”中

检查:action.php

这一步要将用户输入数值与session中的数值进行比对

相等,输出“正确”

不相等,输出“不正确”

<?php
Session_start(); 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 if($_SESSION["check"]!=intval($_POST["cikle"])){
 echo "不正确";
 }else{
 echo "正确";
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP里的中文变量说明
Jul 23 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
php中session定期自动清理的方法
Nov 12 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 #PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 #PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 #PHP
php从身份证获取性别和出生年月
Feb 09 #PHP
Yii2框架实现数据库常用操作总结
Feb 08 #PHP
Yii2实现中国省市区三级联动实例
Feb 08 #PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 #PHP
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP的PDO错误与错误处理
2019/01/27 PHP
理解Javascript_10_对象模型
2010/10/16 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
Vue表单验证插件的制作过程
2017/04/01 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python 日期操作类代码
2018/05/05 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python求解正态分布置信区间教程
2019/11/20 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
教师专业理论水平的自我评价分享
2013/11/09 职场文书
个人自我评价分享
2013/12/20 职场文书
湘江北去观后感
2015/06/15 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
聊一聊python常用的编程模块
2021/05/14 Python
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
Python列表的索引与切片
2022/04/07 Python
mysql 子查询的使用
2022/04/28 MySQL