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 {
    // 验证码输入错误,给出提示
}

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

本文链接:https://my.lmcjl.com/post/14926.html

展开阅读全文

4 评论

留下您的评论.