使用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
Dec 14 PHP
PHP 采集心得技巧
May 15 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
php实现简单的MVC框架实例
Sep 23 PHP
php进程间通讯实例分析
Jul 11 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 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
关于尾递归的使用详解
2013/05/02 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
vue-axios使用详解
2017/05/10 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
Vue动态组件实例解析
2017/08/20 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
微信小程序签到功能
2018/10/31 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python何时应该使用Lambda函数
2019/07/02 Python
Python 如何提高元组的可读性
2019/08/26 Python
python global关键字的用法详解
2019/09/05 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
村干部培训方案
2014/05/02 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
2014年法院工作总结
2014/11/24 职场文书
项目建议书
2015/02/04 职场文书
工作证明格式范文
2015/06/15 职场文书