php 验证码实例代码

yizhihongxing

当开发一些需要用户输入敏感信息的网站时,很有必要在用户提交表单前进行验证码验证,以防止恶意用户通过程序提交大量无效数据。在 PHP 中,我们可以使用一些库或者自己编写代码来生成并验证验证码。

下面我会讲解一些生成验证码的常用方法,以及提供一些生成验证码的示例代码。

生成图形验证码

步骤1:定义一个字符集

我们要生成随机的字符验证码,需要定义一个字符集,可以是数字和大小写字母等。

$charSet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

步骤2:随机生成验证码

我们可以通过调用 mt_rand() 函数随机生成字符验证码,这里的示例代码会生成一个6位的验证码。

$length = 6;
$randStr = '';
for ($i = 0; $i < $length; $i++) {
    $randStr .= $charSet[mt_rand(0, strlen($charSet) - 1)];
}

步骤3:将验证码存储在 session 中,并生成验证码图片

我们需要将生成的验证码存储在 session 中,并生成验证码图片,以便用户在网页上输入验证码。这里我们可以借助 imagecreate()imagecolorallocate()imagettftext() 等函数生成一个带有验证码的验证码图片。

// 开启 session
session_start();
// 存储验证码
$_SESSION['captcha_code'] = $randStr;

// 创建画布
$width = 100;
$height = 50;
$image = imagecreate($width, $height);
// 随机生成背景颜色
$bgcolor = imagecolorallocate($image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
// 随机生成验证码颜色
$color = imagecolorallocate($image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
// 生成验证码图案
$fontPath = 'arial.ttf';
for ($i = 0; $i < $length; $i++) {
    $fontSize = mt_rand(20, 25);
    $angle = mt_rand(-30, 30);
    imagettftext($image, $fontSize, $angle, ($i + 1) * ($width / $length), $height / 2 + $fontSize / 2, $color, $fontPath, $randStr[$i]);
}
// 输出图像
header('Content-type:image/png');
imagepng($image);

示例1:单页面验证码

在一个 HTML 页面中添加一个验证码表单:

<form method="post" action="submit.php">
    <input type="text" name="captcha_code" placeholder="请输入验证码">
    <img src="captcha.php" alt="验证码">
    <input type="submit" value="提交">
</form>

当用户提交表单时,我们需要验证用户输入的验证码是否正确。这里我们可以通过比较用户输入的验证码和存储在 session 中的验证码来进行验证。

session_start();
// 获取用户输入的验证码
$captcha = $_POST['captcha_code'];
// 获取存储在 session 中的验证码
$captchaCode = $_SESSION['captcha_code'];
// 判断用户输入的验证码是否正确
if ($captcha === $captchaCode) {
    // 验证码输入正确,处理表单
} else {
    // 验证码输入错误,给出提示
}

示例2:注册页面验证码

在一个注册页面中,我们需要对用户输入的用户名、密码和验证码进行验证,如果验证通过,才能提交表单进行注册。

<form method="post" action="register.php">
    <label>用户名:<input type="text" name="username"></label><br>
    <label>密码:<input type="password" name="password"></label><br>
    <label>验证码:<input type="text" name="captcha_code"></label>
    <img src="captcha.php" alt="验证码">
    <input type="submit" value="注册">
</form>

当用户提交表单时,我们需要对用户输入的验证码进行验证。如果验证通过,我们可以将用户名和密码存储到数据库中,完成用户注册。

session_start();
// 获取用户输入的用户名、密码和验证码
$username = $_POST['username'];
$password = $_POST['password'];
$captcha = $_POST['captcha_code'];
// 获取存储在 session 中的验证码
$captchaCode = $_SESSION['captcha_code'];
// 判断用户输入的验证码是否正确
if ($captcha === $captchaCode) {
    // 验证码输入正确,将用户名和密码存储到数据库中
} else {
    // 验证码输入错误,给出提示
}

生成短信验证码

除了图形验证码,我们还可以生成短信验证码,通过短信将验证码发送给用户。

步骤1:生成随机数字

与生成图形验证码的方法类似,我们可以随机生成一个指定长度的数字。

$length = 6;
$randStr = '';
for ($i = 0; $i < $length; $i++) {
    $randStr .= mt_rand(0, 9);
}

步骤2:将验证码存储在 session 中,并发送短信

我们需要将生成的验证码存储在 session 中,并通过一些短信发送平台发送短信给用户。这里我们可以利用第三方短信发送服务,比如阿里大鱼、云片等。

session_start();
// 存储验证码
$_SESSION['sms_captcha_code'] = $randStr;

// 发送短信
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$phone = '13800138000';
$templateCode = 'SMS_1234567890'; // 你的短信模板 ID
$sms = new SmsClient($apiKey, $apiSecret);
$result = $sms->send($phone, $templateCode, ['code' => $randStr]);
if ($result->code === 0) {
    // 短信发送成功
} else {
    // 短信发送失败
}

示例1:找回密码页面

在一个找回密码页面中,我们需要让用户输入手机号和验证码,如果验证码输入正确,才能进行下一步密码重置操作。

<form method="post" action="reset_password.php">
    <label>手机号:<input type="text" name="phone"></label><br>
    <label>验证码:<input type="text" name="sms_captcha_code"></label>
    <input type="submit" value="下一步">
</form>

当用户提交表单时,我们需要对用户输入的验证码进行验证。如果验证通过,我们可以进入下一步密码重置操作。

session_start();
// 获取用户输入的手机号和验证码
$phone = $_POST['phone'];
$smsCaptcha = $_POST['sms_captcha_code'];
// 获取存储在 session 中的验证码
$smsCaptchaCode = $_SESSION['sms_captcha_code'];
// 判断用户输入的验证码是否正确
if ($smsCaptcha === $smsCaptchaCode) {
    // 验证码输入正确,进入下一步操作
} else {
    // 验证码输入错误,给出提示
}

示例2:注册页面

在一个注册页面中,我们需要让用户输入手机号和验证码进行注册。

<form method="post" action="register.php">
    <label>手机号:<input type="text" name="phone"></label><br>
    <label>验证码:<input type="text" name="sms_captcha_code"></label>
    <input type="submit" value="注册">
</form>

当用户提交表单时,我们需要对用户输入的验证码进行验证。如果验证通过,我们可以将手机号和密码存储到数据库中,完成用户注册。

session_start();
// 获取用户输入的手机号和验证码
$phone = $_POST['phone'];
$smsCaptcha = $_POST['sms_captcha_code'];
// 获取存储在 session 中的验证码
$smsCaptchaCode = $_SESSION['sms_captcha_code'];
// 判断用户输入的验证码是否正确
if ($smsCaptcha === $smsCaptchaCode) {
    // 验证码输入正确,将手机号和密码存储到数据库中
} else {
    // 验证码输入错误,给出提示
}

以上就是生成验证码的一些常用方法和示例代码,可以满足大多数网站的需求。需要注意的是,验证码的安全性并不是绝对的,一些高级黑客仍然可以通过一些方式绕过验证码进行恶意操作。但是对于大部分普通用户来说,验证码可以有效地防止恶意攻击。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php 验证码实例代码 - Python技术站

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

相关文章

  • PHP实现简单的协程任务调度demo示例

    PHP实现简单的协程任务调度是通过PHP的协程扩展实现的。下面是实现简单的协程任务调度的完整攻略。 1. 环境准备 首先需要安装Swoole扩展,并开启–enable-async-redis编译选项。可以通过以下命令安装: pecl install swoole_async_redis 2. 实现代码 <?php function coroutine…

    PHP 2023年5月23日
    00
  • php 使用fopen函数创建、打开文件详解及实例代码

    PHP使用fopen函数创建、打开文件详解及实例代码 简介 PHP中的fopen()函数用于创建、打开文件,并返回一个文件指针。这个文件指针可以用于读写文件内容。 语法 fopen ( string $文件名 , string $打开模式 [, bool $使用包含路径的安全检查 ] ) 参数 描述 string $文件名 必须。较为文件名的字符串。 str…

    PHP 2023年5月26日
    00
  • php正则之函数 preg_replace()参数说明

    下面是关于 “php正则之函数 preg_replace()参数说明” 的详细讲解。 preg_replace()函数简介 preg_replace()函数是PHP正则表达式的替换函数,用于将字符串中匹配的内容替换为指定的内容。该函数支持正则表达式和字符串两种模式的搜索和替换操作。 preg_replace()函数参数说明 preg_replace()函数的…

    PHP 2023年5月26日
    00
  • PHP使用ZipArchive批量打包压缩文件并下载

    PHP使用ZipArchive批量打包压缩文件,并下载。使用php自带的ZipArchive类,可以压缩或解压文件。 首先需要确定已经安装了zip扩展,如果没有安装,请先安装,下载:http://pecl.php.net/package/zip (相应php版本的zip包)     先把需要下载的文件路径找出来并组成数组,如下 Array ( [0] =&g…

    PHP 2023年4月18日
    00
  • PHP读取文件,解决中文乱码UTF-8的方法分析

    PHP读取文件,解决中文乱码UTF-8的方法分析 在PHP中读取文件时,我们经常会遇到中文乱码的问题,尤其是当文件编码为UTF-8时。下面我们将详细讲解如何解决这个问题。 问题分析 在读取UTF-8编码的文件时,PHP默认使用的是ISO-8859-1编码。因此,如果在读取UTF-8文件时不做处理,就会出现中文乱码问题。 解决这个问题一般有两种方法,分别是: …

    PHP 2023年5月26日
    00
  • ThinkPHP基于think-queue的队列插件实现消息推送

    ThinkPHP基于think-queue的队列插件实现消息推送 ThinkPHP是一款流行的PHP框架,它提供了丰富的功能和工具,使得开发者可以快速构建高质量的Web应用程序。其中think-queue是一个基于Redis或者其他队列服务的队列插件,可以用于异步处理任务和消息推送等场景。本文将详细讲解如何使用think-queue插件实现消息推送功能。 安…

    PHP 2023年5月12日
    00
  • 使命召唤12CPU到100解决办法

    以下是针对“使命召唤12CPU到100解决办法”的完整攻略: 问题描述 在玩使命召唤12时,有时候会发现游戏在运行时会导致CPU占用率飙升到100%,这会导致游戏运行缓慢,影响游戏体验。下面将提供几种解决办法。 解决办法 1. 关闭无关程序 在打开游戏之前,关闭所有不必要的后台程序,例如音乐播放器、浏览器等等,这些程序会占用一定的CPU资源,导致游戏运行卡顿…

    PHP 2023年5月27日
    00
  • i5 11400F相比10400F性能差距大吗 i5-10400F和11400F对比评测

    i5 11400F相比10400F性能差距大吗? 概述 Intel Core i5 11400F和i5 10400F都是英特尔酷睿系列中的主流处理器,面向中高端市场。很多用户想要了解这两款处理器的性能差距,以便于更好的选择一款适合自己的处理器。 对比 目前市场上的主流评测数据显示,i5 11400F在多核性能、单核性能、能效比等方面,都比i5 10400F表…

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