php 验证码 (2)

这篇博客介绍了PHP验证码的使用场景,如用户登录/注册,并详细阐述了验证码的实现步骤,包括创建图像资源、分配颜色、填充、绘制元素、生成保存图像以及销毁资源。还提供了login.php中HTML与PHP验证代码块的实例。
摘要由CSDN通过智能技术生成

验证码的使用场景:用户登录/注册页面 (常见)

验证码的实现步骤:(1)创建一个图像资源

                                (2)给图像资源分配颜色

                                (3)填充颜色

                                (4)绘制元素并填充

                                (5)生成并保存图像

                                (6)销毁图像资源

接下来来看看提交验证码的实现实例吧。

新建一个login.php

login.php下的 html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="./login.php" method="post">
        <img src="./index.php"  onclick="this.src = this.src +'?'+new Date().getTime();" ><br/>
        <input type="text" name="captcha" placeholder="请输入图片中的验证码"><br/>
        <input type="submit" value="验证" name="submit">
    </form>
</body>
</html>

php 验证代码块:

<?php
    session_start();
    if (isset($_POST['submit'])) {
        $captcha = $_POST['captcha'];
        if (strtolower($captcha) == strtolower($_SESSION['captcha'])) {
            echo '验证码正确,正式登录';
            $_SESSION['captcha'] = null;
        } else {
            echo '验证码错误,请重新输入';
        }
    }
?>

生成验证码(captcha.php):

<?php
session_start();
/* ------------------------------------------创建英文数字验证码 ---------------------------------------------- */
$width    = 117;
$height   = 42;
$alpha    = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz0123456789";
$fontSize = 18;  //字体大小
$font     = __DIR__. "/font/arial.ttf";  //设置字体路径
$j        = 0;
$captcha  = '';
//1、创建图像资源 (通过imagecreate/imagecreatetruecolor创建图像资源)
$image  = imagecreate($width, $height);            //1、创建图像资源 (width=117,height=42)
//2、分配颜色(通过 imagecolorallocate 分配颜色)
$color  = imagecolorallocate($image, 255, 255,255);   //2、imagecolorallocate()分配颜色
//3、填充颜色 (通过 imagefill 填充颜色)
imagefill($image,0,0,$color);
//4、填充元
for ($i = 0;$i < 4;$i++) {
    // 字体颜色
    $color3      = imagecolorallocate($image, 87, 123, 35);
    $j           = !$i ? 15 : $j+25;
    //设置字体内容
    $code        = substr($alpha, mt_rand(0, strlen($alpha)-1), 1);
    $captcha    .= $code;
    //设置字体坐标
    $y = 29;
    //$x = ($i * 99 / 4) + mt_rand(5, 20);
    imagettftext($image, $fontSize, 0, $j, $y, $color3, $font, $code);  //这种填充方式需要加载字体文件
    //imagestring($image, $fontSize, $x, $y, $code, $color3);   //这种填充不需要字体文件
}

for ($i = 0; $i < 200; $i++) {
    $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
    imagesetpixel($image, mt_rand(1, 117), mt_rand(1, 41), $pointcolor);
}

for ($i = 0; $i < 10; $i++) {
    $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
    imageline($image, mt_rand(1, 117), mt_rand(1, 43), mt_rand(1, 117), mt_rand(1, 43), $linecolor);
}

$_SESSION["captcha"] = $captcha;
header("Content-type:image/gif");
imagegif($image);
//7.销毁图片
imagedestroy($image);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值