PHP实现验证码制作

本文介绍如何使用PHP实现验证码的制作,希望给有需要的人以帮助。

验证码介绍

PHP实现验证码制作_第1张图片

验证码制作

PHP实现验证码制作_第2张图片
PHP实现验证码制作_第3张图片
开发环境:
XAMPP集成开发环境(去官网下载安装即可)
安装后启动apache
站点目录是C:\xampp\htdocs
检查php是否只支持GD:
php语言需要依赖GD扩展实现验证码
通过


    phpinfo();

查看是否支持
不支持GD应安装GD

实现简单的验证码

通过php代码,生成一张100*30px的图片,方法是

resource imagecreatetruecolor(int $width,int $height)

注意:
这依赖GD扩展,输出图片前必须提供输出图片header信息,默认输出为黑色背景

在底图上显示随机数字方法是:

int imagecolorallocate(resource $image,int $red,int $green,int $blue)
bool imagestring(resource $image,int $font,int $x,int $y, string $s,int $col)

注意:
控制字体大小与分布,避免字体重叠或显示不全。

为验证码增加干扰元素,干扰的点或线,方法是:

bool imagesetpixel(resource $image,int $x,int $y,int $color)
bool image line(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)

注意:
干扰信息要控制好颜色

让图片上的验证码内容为字母或字母数字的混合体,方法是:

int rand(int $min,int $max)
mixed array_rand(array $input[,iint $num_req=1])

通过session在服务器端记录验证码信息,便于用户输入后校验,方法是:
bool session_start(void)
注意:
session_start必须在脚本的最顶部,多服务器情况下需要考虑集中管理session信息

实现前台表单

编辑form.php

实现验证码的动态验证只需:
增加可点击的”换一个“按钮,用JS选择器选取验证码图片,用JS修改验证码图片地址

完整源码

在站点目录下创建project目录,在其中创建capture.php以编写验证码与form.php以创建表单
下面是capture.php:

//制作图片
    $image=imagecreatetruecolor(100,30);
    $bgcolor=imagecolorallocate($image,255,255,255);
    imagefill($image,0,0,$bgcolor);

    //制作数字
    /*for($i=0;$i<4;$i++){
        $fontsize=6;
        $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
        $fontcontent=rand(0,9);
        $x=($i*100/4)+rand(5,10);
        $y=rand(5,10);
        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
    }*/
    //制作数字字母并保存于captch_code中
    $captch_code='';

    for ($i=0;$i<4;$i++){
        $fontsize=6;
        $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
        $data='abcdefghijklmnopqrstuvwxyz23456789';
        $fontcontent=substr($data,rand(0,strlen($data)),1);
        $captch_code.=$fontcontent;
        $x=($i*100/4)+rand(5,10);
        $y=rand(5,10);
        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);

    }
    $_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);
    ?>

下面是form.php:



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

}

?>



<html>
    <head>
        <meta charset="utf-8"/>
        <title>确认验证码title>
    head>
    <body>
        <form method="post" action="./form.php">
            <p>验证码图片:<img id="capture_image" border="1" src="./capture.php?r=" width="100" height="30"/>
            <a href="javascript:void(0)" onclick="document.getElementById('capture_image').src='./capture.php?r='+Math.random()">换一个?a>
            p>
            <p>请输入验证码:<input type="text" name="authcode" value=""/>p>
            <p><input type="submit" value="提交" style=padding:6px 20px;">p>
        form>
    body>
html>
具体课程请去慕课网寻找课程”PHP实现验证码制作“学习

你可能感兴趣的:(php)