PHP登录带图片,PHP登录注册完整图片验证码实现

通过上一篇 PHP gd简单画图学习后。这篇将继续探索实现PHP图片验证码的实现。效果图如下

34ffdcbab83cd3f347aac905ff6d1a28.png

为什么需要验证码?

验证码设计。验证码一使用于用户注册和登录。主要是防止机器批量注册用户或机器频繁测试登录

此处的核心点有两个。第一是图片验证码实现。第二是如果在验证页面检验输入的验证码是否正确

首先我们先实现验证码

新建一个cfv(Verification Code).php文件,为单独生成验证码文件

创建一个150*40px的画布,以及设置需要的颜色等:

$img = imagecreatetruecolor(150,40);

$white = imagecolorallocate($img,240,241,218);

$gray = imagecolorallocate($img,100,233,12);

$orange = imagecolorallocate($img,168,170,19);

imagefill($img,0,0,$white);//填充画布

合并一个从0-9,a-z,A-Z数组,$arr = array_merge(range(0,9),range(a,z),range(A,Z));

打乱数组 shuffle($arr);

从数组里面取出4个,并且以" "空格连接,组成验证码需要的字符串 $str = join(" ",array_slice($arr,0,4));

画验证码文字到画布上 imagettftext($img,20,0,10,30,$gray,"my.TTF",$str);

imagettftext (resource$image ,float$size ,float$angle ,int$x ,int$y ,int$color ,string$fontfile ,   string$text ) $image:画布 $size:字体大小 $angle:字体偏转角度 $x:字体左下x坐标 $y:字体左下y坐标 $color 字体颜色 $fontfile()在C:\Windows\Fonts下任意取一个.TTF文件$text 验证码文字

为了防止机器频繁测试。所以得增加干扰线 。如下增加了30条干扰线

for ($i=0; $i <30 ; $i++) {

imagearc($img, mt_rand(0,150), mt_rand(0,40), mt_rand(0,30), mt_rand(0,30), mt_rand(0,360),                         mt_rand(0,360), $orange);}

最后画出该验证码图像,并且释放资源   imagejpeg($img);imagedestroy($img);

创建表单,这儿随便创建了一个表单。代码直接上图

7b6ad2fc412bd7eb90d2f7b93a9e2e40.png

最后是验证提交的表单验证码信息是否正确

由于我们验证的php和验证码的php文件不同,所以改怎么在验证码图片中获取文字作比较?此处停留思考1分钟^-^

这时候我们需要借助Session,关于Session详细运用,这儿不做深究。只略讲一下这儿的Session运用

开启Session session_start();需要在验证码最上面开启。注意这句代码前不能有输出比如echo......

把验证码字符串存入Session  $_SESSION['vcode']=$str;

在验证的php文件中取出Session $scode = $_SESSION['vcode']

checkrgis.php 里面需要拿到表单传入的验证码,在和Session的验证码做比较。这样即可验证。代码如下

session_start();

$scode = $_SESSION['vcode'];

$pvfc = $_POST['vfc'];

$code = strtolower(str_replace(" ","",$scode));

$fvc = strtolower(str_replace(" ","",$pvfc));

注意:获得的用户输入的验证码和Session的验证码都需要把空格全部消除,在转小写后比较。对应上面4,5句代码

源码下载地址https://pan.baidu.com/s/1k4xn8zdLC9yKvFEGUryN4g  提取码 st8f

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值