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

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

为什么需要验证码?

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

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

首先我们先实现验证码

  • 新建一个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);

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

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

  • 由于我们验证的php和验证码的php文件不同,所以改怎么在验证码图片中获取文字作比较?此处停留思考1分钟^-^
  • 这时候我们需要借助Session,关于Session详细运用,这儿不做深究。只略讲一下这儿的Session运用
  1. 开启Session session_start();需要在验证码最上面开启。注意这句代码前不能有输出比如echo......
  2. 把验证码字符串存入Session  $_SESSION['vcode']=$str;
  3. 在验证的php文件中取出Session $scode = $_SESSION['vcode']
  • checkrgis.php 里面需要拿到表单传入的验证码,在和Session的验证码做比较。这样即可验证。代码如下
  1.  session_start();
  2. $scode = $_SESSION['vcode'];
  3. $pvfc = $_POST['vfc'];
  4. $code = strtolower(str_replace(" ","",$scode));
  5. $fvc = strtolower(str_replace(" ","",$pvfc));

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

 

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

 

 

           

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值