最新公告
  • 欢迎您光临站长源码网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • php 中怎么生成验证码

    正文概述 管理员   2024-08-23   56

    验证码(Captcha)是指用于区分机器和人类用户的一种技术,通常用于防止自动化的攻击和垃圾信息。在 PHP 中,生成验证码一般使用 GD 库,可以生成数字、字母、数学公式等多 种类型的验证码。

    下面是一个简单的 PHP 代码示例,用于生成数字和字母混合的验证码:

    ```php

    session_start();

    $length = 6; // 验证码长度

    $width = 100; // 图片宽度

    $height = 40; // 图片高度

    // 创建画布

    $image = imagecreatetruecolor($width, $height);

    // 定义白色背景和黑色文字颜色

    $bgColor = imagecolorallocate($image, 255, 255, 255);

    $textColor = imagecolorallocate($image, 0, 0, 0);

    // 填充背景色

    imagefill($image, 0, 0, $bgColor);

    // 生成随机字符串

    $charset = 'abcdefghkmnpqrstuvwxyz23456789'; // 随机字符串集合(去掉易混淆的字符)

    $captcha = ''; // 验证码

    for ($i = 0; $i < $length; $i++) {

    $captcha .= $charset[mt_rand(0, strlen($charset)-1)];

    }

    // 把验证码保存到 session

    $_SESSION['captcha'] = $captcha;

    // 把验证码绘制到画布上

    $font = 5; // 字体大小

    $x = 10; // 横坐标

    $y = $height/2 + $font/2; // 纵坐标

    for ($i = 0; $i < $length; $i++) {

    $angle = mt_rand(-10, 10); // 字符旋转角度

    imagettftext($image, $font, $angle, $x, $y, $textColor, 'fonts/arial.ttf', $captcha[$i]);

    $x += $font + mt_rand(0, 5);

    }

    // 添加噪点

    for ($i = 0; $i < 50; $i++) {

    $color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));

    imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $height-1), $color);

    }

    // 添加干扰线

    for ($i = 0; $i < 5; $i++) {

    $color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));

    imageline($image, mt_rand(0, $width-1), mt_rand(0, $height-1), mt_rand(0, $width-1), mt_rand(0, $height-1), $color);

    }

    // 输出图片并销毁图像资源

    header('Content-Type: image/png');

    imagepng($image);

    imagedestroy($image);

    这段代码使用 imagecreatetruecolor 函数创建了一个大小为 $width x $height 的画布,并使用 imagefill 函数填充白色背景色。然后,它使用 imagettftext 函数把随机生成的验证码绘制到画布上,并添加了一些干扰线和噪点。最后,它输出了图片并销毁图像资源。

    需要注意的是,上面的代码使用了 PHP 的 Session 机制来保存验证码,因此需要在执行这段代码之前确保会话已经启动或者手动启动会话。同时,为了把中文字符也显示到画布上,需要保证 GD 库已经安 装了 FreeType 支持。

    在实际应用中,为了增强验证码的安全性和可读性,还可以使用更复杂的字体、调整字体大小、添加更多的干扰元素等技术。

    生成验证码是 Web 开发中常用的技术之一,它可以很好地防止机器人或非法用户进行恶意操作。在 PHP 中生成验证码也是非常简单的事情,下面我们来一步步介绍如何生成验证码。

    步骤一:创建画布和字体

    在 PHP 中生成验证码,首先需要创建一个画布,然后在画布上绘制出验证码文本,并设置字体和字体大小。

    ```php

    // 创建画布

    $image = imagecreatetruecolor(100, 30);

    // 设置字体和字体大小

    $font = './arial.ttf';

    $fontSize = 20;

    `imagecreatetruecolor()` 函数用于创建一个真彩色图像,默认情况下是黑色背景。还可以使用 `imagefill()` 函数来填充其它颜色的背景。

    `$font` 变量用于指定字体文件的位置,这里使用的是 Arial 字体。如果没有安 装 Arial 字体,也可以使用系统自带的字体(如宋体、黑体等)。

    `$fontSize` 变量用于指定字体大小,这里设置为 20。

    步骤二:生成随机字母和数字

    在画布上绘制验证码文本之前,需要先生成随机的字母和数字,这里我们使用 `mt_rand()` 函数来生成。

    ```php

    // 随机生成验证码文本

    $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $numbers = '0123456789';

    $code = '';

    for ($i = 0; $i < 4; $i++) {

    $char = '';

    $type = mt_rand(0, 1);

    if ($type == 0) {

    $char = $letters[mt_rand(0, strlen($letters) - 1)];

    } else {

    $char = $numbers[mt_rand(0, strlen($numbers) - 1)];

    }

    $code .= $char;

    }

    `$letters` 和 `$numbers` 变量用于指定可用的字母和数字。这里选择了英文字母和数字,可以根据实际需求进行调整。

    使用循环来生成 4 位的验证码,每次循环中先使用 `mt_rand()` 函数随机选择字母或数字,然后再根据随机选择的类型生成对应的字符,并将其添加在验证码文本中。

    步骤三:绘制验证码文本

    有了随机生成的验证码文本,现在就可以在画布上绘制出来。可以使用 `imagettftext()` 函数或 `imagestring()` 函数来绘制文本。

    ```php

    // 绘制验证码文本

    $textColor = imagecolorallocate($image, 255, 255, 255); // 文本颜色为白色

    imagettftext($image, $fontSize, 0, 10, 22, $textColor, $font, $code);

    `imagecolorallocate()` 函数用于创建文本颜色,这里设置为白色。

    `imagettftext()` 函数用于绘制 TrueType 字体的文本,参数分别为:画布对象、字体大小、旋转角度、左上角 x 坐标、左上角 y 坐标、文本颜色、字体文件、验证码文本。

    步骤四:输出图像并释放资源

    最后一步就是将生成的验证码输出到浏览器,并释放资源。

    ```php

    // 输出图像并释放资源

    header('Content-Type: image/png');

    imagepng($image);

    imagedestroy($image);

    `header()` 函数用来设置 HTTP response header,这里设置输出类型为 PNG 图片类型。

    `imagepng()` 函数用于将创建的图像输出到浏览器。

    `imagedestroy()` 函数用于释放掉创建的图像资源。

    完整的代码如下:

    ```php

    // 创建画布

    $image = imagecreatetruecolor(100, 30);

    // 设置字体和字体大小

    $font = './arial.ttf';

    $fontSize = 20;

    // 随机生成验证码文本

    $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $numbers = '0123456789';

    $code = '';

    for ($i = 0; $i < 4; $i++) {

    $char = '';

    $type = mt_rand(0, 1);

    if ($type == 0) {

    $char = $letters[mt_rand(0, strlen($letters) - 1)];

    } else {

    $char = $numbers[mt_rand(0, strlen($numbers) - 1)];

    }

    $code .= $char;

    }

    // 绘制验证码文本

    $textColor = imagecolorallocate($image, 255, 255, 255); // 文本颜色为白色

    imagettftext($image, $fontSize, 0, 10, 22, $textColor, $font, $code);

    // 输出图像并释放资源

    header('Content-Type: image/png');

    imagepng($image);

    imagedestroy($image);

    使用以上代码,即可在浏览器中生成随机的 4 位验证码。


    站长源码网 » php 中怎么生成验证码

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    微信支付
    余额支付
    ×
    微信扫码支付 0 元