php 验证码实例代码

当开发一些需要用户输入敏感信息的网站时,很有必要在用户提交表单前进行验证码验证,以防止恶意用户通过程序提交大量无效数据。在 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日

相关文章

  • 微信etc怎么激活?微信etc使用教程详解

    微信etc怎么激活? 要使用微信等线上支付方式支付ETC费用,需要先完成ETC账户的激活过程。具体步骤如下: 打开 “全国客户服务热线” 所在的省客服电话,完成ETC账户实名认证。 获得ETC账户名、密码和交易密码后,拨打客服电话进行账户激活。 微信etc使用教程详解 完成ETC账户激活后,就可以使用微信等线上支付方式进行ETC费用缴纳了。具体步骤如下: 打…

    PHP 2023年5月23日
    00
  • 如何用php获取文件名后缀

    获取文件名后缀是一个常见的操作,可以通过 PHP 中的 pathinfo() 函数来实现。下面是获取文件名后缀的完整攻略: 步骤一:获取文件路径 首先,我们需要获取文件的路径。可以通过传递文件路径的字符串参数来实现: $file_path = ‘example/test.jpg’; 步骤二:使用pathinfo()函数获取文件信息 接下来,使用 pathin…

    PHP 2023年5月26日
    00
  • 微信小程序嵌入腾讯视频源过程详解

    微信小程序嵌入腾讯视频源过程详解 什么是微信小程序和腾讯视频源 微信小程序是一种轻量级的应用程序,可以在微信平台上运行,无需下载安装即可使用。而腾讯视频源是腾讯视频平台提供的一种视频播放服务,可以为用户提供海量的在线视频资源。 微信小程序如何嵌入腾讯视频源 步骤1:获取腾讯视频源的API接口 我们可以登录腾讯视频平台的开发者中心,根据自己的需求,申请相应的A…

    PHP 2023年5月23日
    00
  • PHP调用外部程序的方法解析

    下面是详细讲解“PHP调用外部程序的方法解析”的完整攻略。 PHP调用外部程序的方法解析 在某些情况下,PHP需要调用外部程序,比如使用FFmpeg处理视频,使用ImageMagick处理图片等。这时,PHP可以使用一些函数来调用外部程序,本文将对这些函数进行介绍。 exec函数 exec函数是PHP调用外部程序的最简单函数之一,在调用外部程序时,该函数会将…

    PHP 2023年5月30日
    00
  • PHP zlib扩展实现页面GZIP压缩输出

    下面是详细讲解“PHP zlib扩展实现页面GZIP压缩输出”的完整攻略。 1. 确认PHP是否支持ZLib扩展 在开始之前,我们首先需要确定PHP环境是否已经支持ZLib扩展。您可以通过以下方式检查: 创建一个PHP文件,命名为info.php。 在该文件中添加以下代码: “`php “` 将该文件上传到您的Web服务器上。 在浏览器中访问该文件,并查…

    PHP 2023年5月26日
    00
  • 编写Smarty插件在模板中直接加载数据的详细介绍

    编写Smarty插件可以方便在模板中直接加载数据,下面是具体的攻略: 步骤一:创建插件 在Smarty的plugins目录中创建一个新文件,以“插件名.plugin.php”的格式命名。比如,我们要创建一个名为“myplugin”的插件,就可以在plugins目录中创建一个myplugin.plugin.php的文件。 步骤二:编写插件代码 在myplugi…

    PHP 2023年5月26日
    00
  • PHP程序中的文件锁、互斥锁、读写锁使用技巧解析

    PHP程序中的文件锁、互斥锁、读写锁 什么是锁 锁(Lock)是多任务操作系统中用来协调对共享资源的访问的方法。在多线程或多进程程序中,访问共享资源时需要采用一些技巧来保证数据正确性。从而避免出现并发读写冲突的问题。 文件锁 在PHP程序中,可利用文件锁技术来实现对某个文件的互斥访问。文件锁的典型应用场景是运用在多进程、多机器上的系统中,使得多个并发的进程或…

    PHP 2023年5月23日
    00
  • 学习php设计模式 php实现建造者模式

    PHP 设计模式是一种可重复使用的解决特定问题的代码设计方案,建造者模式是其中一种设计模式。下面是学习 PHP 设计模式建造者模式的攻略: 什么是建造者模式 建造者模式是一种创建型设计模式,将一个复杂对象的构建过程和它的表示分离开来,使同样的构建过程可以创建不同的表示。建造者模式通常涉及到一个抽象建造者类和具体的建造者类、指导者类和客户端类。 建造者模式的实…

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