PHP实现验证码制作原理

401 查看

本文根据慕课网视频制作

在我们进行登录或者注册时,会出现各种奇形怪状的验证码(当然正常的居多),我们需要认真输入才能通过验证~当然现在采取了某些更加高级的技术,这些我们不谈。 验证码存在的意义就是用来区分到底是人在登录还是机器在登录。服务器的资源是有限的,我们需要通过一种机制将这些机器请求给屏蔽掉,从而使资源为人服务。我们来看看怎么用PHP来实现这个功能~

先看看具体步骤

1.生成验证码底图
2.验证码内容生成
3.产生后增加某些干扰元素
4.生成验证码,以及对比校验。

我们再来看看所要掌握的核心技术~

1、PHP图片处理库GD
2、随机数,随机字母,RGB颜色基本理解
3、SESSION基础
4、AJAX基础

上正餐~~

<?php

    session_start();

    $image = imagecreatetruecolor(100, 30);
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
    imagefill($image,0,0,$bgcolor);//GD库需要了解一下~~~

    $captch_code='';
    for($i=0;$i<4;$i++){
        $fontsize=6;
        $fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120),rand(0,120));
        $data='abcdefghigklmnopqrstuvwxyz1234567890';
        $fontcontent=substr($data, rand(0,strlen($data)),1);//选取子字符
        $x=($i*100/4)+rand(5,10);
        $y=rand(5,10);
        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
        $captch_code.=$fontcontent;
    }
       $_SESSION['authcode']=$captch_code;

    for($i=0;$i<200;$i++){
        $pointcolor=imagecolorallocate($image, rand(50,200),rand(50,200), rand(50,200));
        imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);//画点
    }
    for ($i=0; $i<3 ; $i++) { 
        $linecolor= imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));//浅颜色
        imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor);//避免干扰元素过多,颜色过深
    }

    header( "Content-type:image/png" );
    imagepng($image);
    imagedestroy($image);//别忘了释放资源
?>

图片描述
其实总体来说代码很简单
最后我们可以再写一个表单提交,判断用户验证是否正确

<?php
  header("Content-Type: text/html; charset=utf-8");
    if (isset($_REQUEST['authcode'])) {
        session_start();

        if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
            echo "输入正确";
        }else{
            echo "输入错误";
        }
        exit();
    }
?>

这是我昨天学习的,总体来说还算简单,比较容易上手的一个案例。在后面就可以进阶的做一个文字或者图片验证码了——