一个简单的PHP验证码实现代码

yizhihongxing

下面就来详细讲解一下“一个简单的PHP验证码实现代码”的完整攻略。

第一步:创建验证码图片

我们先要创建一个验证码图片,然后在图片上生成随机字符,将其作为验证码。代码如下:

session_start();

// 设置图片宽度和高度
$width = 100;
$height = 30;

// 创建验证码图片
$image = imagecreatetruecolor($width, $height);

// 设置图片背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);

// 随机生成验证码字符
$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$letter = '';
for ($i = 0; $i < 4; $i++) {
    $letter .= $letters[rand(0, strlen($letters) - 1)];
}

// 将验证码字符存储到session中
$_SESSION['captcha'] = $letter;

// 将验证码字符画到图片上
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 25, $text_color, 'arial.ttf', $letter);

// 输出图片
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

通过以上代码,我们可以得到一个宽为100,高为30的验证码图片,其中字体颜色为黑色,背景颜色为白色,验证码在图片的中间位置。

第二步:验证用户输入的验证码

在用户提交表单时,我们需要对用户输入的验证码进行验证。代码如下:

session_start();

$captcha = $_POST['captcha'];
$real_captcha = $_SESSION['captcha'];

if (strtolower($captcha) == strtolower($real_captcha)) {
    echo '验证码正确';
} else {
    echo '验证码错误';
}

以上代码将用户输入的验证码和session中存储的验证码进行对比,如果相同则验证成功,否则验证失败。

示例说明

示例1:将验证码图片显示在页面中,用户可以看到验证码并输入。用户输入后,提交表单,PHP代码根据用户输入的验证码进行验证,正确则提示验证成功,否则提示验证失败。示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>验证码示例</title>
</head>
<body>
    <form action="check_captcha.php" method="POST">
        <label for="captcha">验证码:</label>
        <input type="text" id="captcha" name="captcha">
        <img src="create_captcha.php" alt="验证码">
        <button type="submit">提交</button>
    </form>
</body>
</html>

在上面的示例代码中,我们将验证码图片输出到img标签中,用户可以看到验证码并输入。当用户提交表单后,跳转到check_captcha.php页面进行验证。

示例2:将验证码图片作为附件发送到用户邮箱中,用户在邮箱中获取验证码并输入。用户输入后,提交表单,PHP代码根据用户输入的验证码进行验证,正确则提示验证成功,否则提示验证失败。示例代码如下:

session_start();

// 用户邮箱
$email = 'example@example.com';

// 设置图片宽度和高度
$width = 100;
$height = 30;

// 创建验证码图片
$image = imagecreatetruecolor($width, $height);

// 设置图片背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);

// 随机生成验证码字符
$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$letter = '';
for ($i = 0; $i < 4; $i++) {
    $letter .= $letters[rand(0, strlen($letters) - 1)];
}

// 将验证码字符存储到session中
$_SESSION['captcha'] = $letter;

// 将验证码字符画到图片上
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 25, $text_color, 'arial.ttf', $letter);

// 保存验证码图片到本地
$image_filename = 'captcha.png';
imagepng($image, $image_filename);
imagedestroy($image);

// 发送邮件
$to = $email;
$subject = '验证码';
$message = '您的验证码为:' . $letter;
$headers = array(
    "From: webmaster@example.com",
    "Reply-To: webmaster@example.com",
    "Content-Type: multipart/mixed; boundary=\"boundary\"",
);

// MIME版本头信息
$mime_header = "--boundary\r\n";
$mime_header .= "Content-Type:text/plain; charset=\"utf-8\"\r\n";
$mime_header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";

// 邮件正文
$mime_content = $mime_header;
$mime_content .= $message . "\r\n\r\n";

// 附件
$file_size = filesize($image_filename);
$file_content = file_get_contents($image_filename);
$mime_content .= "--boundary\r\n";
$mime_content .= "Content-Type: application/octet-stream; name=\"$image_filename\"\r\n";
$mime_content .= "Content-Disposition: attachment; filename=\"$image_filename\"\r\n";
$mime_content .= "Content-Transfer-Encoding: base64\r\n\r\n";
$mime_content .= chunk_split(base64_encode($file_content)) . "\r\n";
$mime_content .= "--boundary--\r\n";

// 发送邮件
$success = mail($to, $subject, $mime_content, implode("\r\n", $headers));

if ($success) {
    // 发送成功
    echo '验证码已发送至您的邮箱,请查收';
} else {
    // 发送失败
    echo '发送验证码失败';
}

以上代码将生成的验证码图片保存到本地,并将验证码图片作为附件发送给用户。当用户输入验证码后,跳转到验证页面进行验证。

希望以上的攻略对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一个简单的PHP验证码实现代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • PHP 代码简洁之道(小结)

    PHP 代码简洁之道(小结) 为什么要写简洁的代码 提高代码可读性 减少检查和调试时间 方便后期维护 如何写简洁的代码 1. 避免深度嵌套 在实际开发中,有时会因为一些条件 or 逻辑的限制导致 if/else, for/while等语句深深嵌套,这是一个代码质量不高的体现,因为嵌套中我们很难一下子理解程序运行的流程以及代码实现的功能,从而给后期的维护和优化…

    PHP 2023年5月23日
    00
  • phpcms V9 常用文件目录结构

    关于”phpcms V9 常用文件目录结构”的详细讲解,以下是完整的攻略: 1.概括 phpcms V9的目录结构主要包括以下几个目录: ├─api # Api目录 │ ├─comment # 评论目录 │ ├─content # 内容目录 │ ├─createhtml # 静态化目录 │ └─search # 搜索目录 ├─attachment # 附件目…

    PHP 2023年5月23日
    00
  • 浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

    浅谈PHP的排列组合 在 PHP 中,排列组合是非常常见的需求,通常可以通过递归算法来实现。下面介绍一下如何使用 PHP 实现对给定数组进行排列组合操作。 算法思路 对于一个由n个数的集合${a_1,a_2,…,a_n}$,求其排列组合的方法可以描述为: 求出集合中单个元素作为独立集合的所有情况,并组成一个数组,称为集合的初步排列; 按照某种顺序,从集合…

    PHP 2023年5月26日
    00
  • PHP程序级守护进程的实现与优化的使用概述

    PHP程序级守护进程的实现与优化的使用概述 什么是PHP程序级守护进程 PHP程序级守护进程是指在PHP中通过编写代码来创建一种特殊类型的程序,该程序能够在后台持续运行,并且在启动后不会退出,直到收到指定的停止信号才会退出。这种类型的程序被称为守护进程,它常常用于长时间运行的任务,如定时任务、消息队列等。 实现PHP程序级守护进程的方法 使用pcntl扩展库…

    PHP 2023年5月23日
    00
  • PHP大文件分割上传 PHP分片上传

    PHP大文件分割上传(也称PHP分片上传)是一种将大文件通过分割成小文件并分批上传的方式,以减轻服务器负担,实现文件上传的方法之一。该方法适用于需要上传较大文件的网站或应用场景,比如云存储、大文件打包等。 以下是实现PHP大文件分割上传的完整攻略: 环境准备 PHP环境 >=5.5 Apache或Nginx服务器 上传文件大小限制需调整 实现步骤 1.…

    PHP 2023年5月26日
    00
  • PHP目录函数实现创建、读取目录教程实例

    当我们通过PHP编写代码时,需要经常操作目录,比如创建、删除、读取目录等。PHP内置了一些函数来实现目录操作,本文将通过实例演示PHP目录函数的使用。 创建目录 如果需要在PHP中创建目录,可以使用mkdir()函数。创建目录的基本语法如下: mkdir ( string $pathname , int $mode = 0777 , bool $recurs…

    PHP 2023年5月27日
    00
  • PHP循环结构实例讲解

    PHP循环结构实例讲解 循环结构是编程中常用的一种结构,可以方便地重复执行一段代码块。在PHP中,提供了多种循环结构,本篇文章将介绍PHP中常用的几种循环结构及其用法。 for循环 for循环是一种常见的循环结构,通常用于重复执行一段固定的代码块,它的语法格式如下: for (初始化表达式; 条件表达式; 循环后操作表达式) { // 待执行的代码块 } 其…

    PHP 2023年5月23日
    00
  • 详解微信小程序 wx.uploadFile 的编码坑

    详解微信小程序 wx.uploadFile 的编码坑 在使用微信小程序的 wx.uploadFile 接口上传文件时,如果没有正确处理编码问题,会导致上传的文件出现乱码或者上传失败等问题。在本文中,我们将详细讲解使用 wx.uploadFile 时可能遇到的编码坑,并给出两个具体的示例说明。 为什么会出现编码问题 wx.uploadFile 接口用于上传文件…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部