php通过GD库实现验证码功能

转载自:https://www.jb51.net/article/143175.htm,作者:不能吃的坚果

实现的效果

具体实现

captcha.php

<?php
/*PHP实现验证码*/
session_start();//开启会话

//创建画布
$image = imagecreatetruecolor(100, 38);

//背景颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
$captch_code = '';//存储验证码

// //随机选取4个数字
// for ($i = 0; $i < 4; $i++) {
//     $fontsize = 10;  //
//     $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//随机颜色
//     $fontcontent = rand(0, 9);
//     $captch_code .= $fontcontent;
//     $x = ($i * 100 / 4) + rand(5, 10); //随机坐标
//     $y = rand(5, 10);
//     imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
// }

//字母和数字混合验证码
for ($i = 0; $i < 4; $i++) {
    $fontsize = 10;  //
    $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//??????
    $data = 'abcdefghijklmnopqrstuvwxyz1234567890'; //数据字典
    $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['captch_code'] = $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, 280), 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);

?>

index.php

<?php
session_start();//开启会话
?>

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <form action="login.php" method="POST">   
            验证码:<input type="text" value="" name="captch_code"><br/>
            <img src="captcha.php" onclick="this.src='captcha.php'">
            <input type="submit" value="submit" name="Login"><br/>
        </form>
    </body>
</html>

login.php

<?php
session_start();//开启会话

if(isset($_SESSION['user_code'])){
    if($_SESSION['user_code'] && $_SESSION['user_code'] !== $_POST['user_code']){
        die('验证码错误');
    }
    else{
        echo '验证码正确';
    }

    // 验证码重置
    $_SESSION['user_code'] = '';
}else{
    die('请输入验证码');
}
?>

看法

没想到一个验证码功能这么简单,我以前想的太过复杂了。