php 图形验证码

1、首先来一个html页面 index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form action="./register.php" method="post">
        <img src="Verify.php"  οnclick="this.src='Verify.php?'+new Date().getTime();" width="100" height="100"><br/>
        <input type="text" name="verify" placeholder="请输入图片中的验证码"><br/>
        <input type="submit" value="验证">
    </form>
</body>
</html>

2、验证码 register.php

<?php
/**
 * 字母+数字的验证码生成
 */
// 开启session
session_start();
//1.创建黑色画布
$image = imagecreatetruecolor(100, 30);
 
//2.为画布定义(背景)颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
 
//3.填充颜色
imagefill($image, 0, 0, $bgcolor);
 
// 4.设置验证码内容
 
//4.1 定义验证码的内容
$content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 
//4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
$captcha = "";
for ($i = 0; $i < 4; $i++) {
    // 字体大小
    $fontsize = 10;
    // 字体颜色
    $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
    // 设置字体内容
    $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
    $captcha .= $fontcontent;
    // 显示的坐标
    $x = ($i * 100 / 4) + mt_rand(5, 10);
    $y = mt_rand(5, 10);
    // 填充内容到画布中
    imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
$_SESSION["verifyimg"] = $captcha;
 
//4.3 设置背景干扰元素
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, 99), mt_rand(1, 29), $pointcolor);
}
 
//4.4 设置干扰线
for ($i = 0; $i < 3; $i++) {
    $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
    imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
}
 
//5.向浏览器输出图片头信息
header('content-type:image/png');
 
//6.输出图片到浏览器
imagepng($image);
 
//7.销毁图片
imagedestroy($image);  
?>

3、提交验证验证码页面register.php

<?php
/**
 * 接受用户登陆时提交的验证码
 */
session_start();
//1. 获取到用户提交的验证码
$verify = $_POST["verify"];
//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
if(strtolower($_SESSION["verifyimg"]) == strtolower($verify)){
    echo "ok";
    $_SESSION["verify"] = "";
}else{
    echo "error";
}
?>

 

4、如果不需要干扰线或者背景干扰元素,直接把里面的内容注释就好了,效果就这样的

 

 

最后来一个小问题,我再win系统上可以显示,传到服务器,图片不显示,可以超看一下是否开启了GD库,怎么操作,先自行百度,我有空再写。

 

转载于:https://www.cnblogs.com/xbxxf/p/8926855.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于 PHP 和 GD 库实现的图形验证码登录页面的示例代码: ```php <?php session_start(); // 生成随机验证码 $code = ''; for ($i=0; $i<4; $i++) { $code .= chr(rand(65, 90)); // 生成 A-Z 的随机字母 } // 将验证码存储在 session 中 $_SESSION['code'] = $code; // 创建验证码图片 $image = imagecreatetruecolor(100, 30); $bg_color = imagecolorallocate($image, 255, 255, 255); // 背景色为白色 $font_color = imagecolorallocate($image, 0, 0, 0); // 字体颜色为黑色 imagefill($image, 0, 0, $bg_color); imagettftext($image, 20, 0, 10, 25, $font_color, 'arial.ttf', $code); // 输出验证码图片 header('Content-type: image/png'); imagepng($image); imagedestroy($image); ?> <!-- 在登录页面中显示验证码图片 --> <form action="login.php" method="post"> <label for="username">用户名:</label> <input type="text" name="username" id="username"><br> <label for="password">密码:</label> <input type="password" name="password" id="password"><br> <label for="code">验证码:</label> <input type="text" name="code" id="code"> <img src="captcha.php" alt="验证码"><br> <input type="submit" value="登录"> </form> ``` 以上代码中,首先在服务器端生成一个随机验证码,并将其存储在 session 中。然后使用 GD 库创建一个 100x30 大小的验证码图片,将随机生成的验证码绘制在图片上,并输出图片到客户端。在登录页面中,使用 `<img>` 标签引用验证码图片,并在用户输入验证码时一并提交到服务器端进行验证
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值