欢迎访问宙启技术站
智能推送

PHP中的验证码生成函数

发布时间:2023-06-20 02:14:13

在前端安全和后端安全进行防范方面,验证码是一种非常常用的方法,可以有效地防范网站被恶意攻击。简单来说,一个验证码就是一个由数字和字母组成的随机字符串,用户需要输入正确的验证码才能进行操作。PHP中也提供了生成验证码的函数,下面将介绍PHP中的验证码生成函数。

1. imagecreatetruecolor()函数

imagecreatetruecolor()函数是PHP中一个非常重要的基础画图函数,用于创建一个真彩色图像,它返回的是一个标识这张图片的ID号,常用于图片的生成。语法如下:

image imagecreatetruecolor(int $width, int $height) 

其中,$width和$height代表图片的宽和高。该函数返回如下格式的一个图片:

$image = imagecreatetruecolor(100, 30);

这个函数可以创建一个宽100像素、高30像素的真彩色图像。

2. imagefilledrectangle()函数

imagefilledrectangle()函数是一个用于绘制图形的函数,可以用它来绘制新鲜又具有美感的验证码图片。其语法如下:

bool imagefilledrectangle(resource $image, int $x1, int $y1, int $x2, int $y2, int $color)

其中,$image为由imagecreate()或imagecreatetruecolor()函数创建的图像资源;$x1 和 $y1 为左上角坐标,$x2 和 $y2 为右下角坐标;$color 为填充颜色。下面是一个示例:

imagefilledrectangle($image, 0, 0, 100, 30, imagecolorallocate($image, 255, 255, 255));

这里我们填充的是一个白色的矩形,坐标范围为从左上角$(0,0)$到右下角$(100,30)$。

3. imagestring()函数

imagestring()函数是一个在图片上输出字符串的函数,可以用它在验证码图片上画出验证码字符串。其语法如下:

bool imagestring(resource $image, int $font, int $x, int $y, string $string, int $color)

其中,$image是由imagecreatetruecolor()或imagecreate()所创建的图像资源;$font 是 0 到 5 的整数,分别代表不同的字体;$x 和 $y 为要绘制的字符串的左上角坐标;$string 是要输出的字符串;$color 是颜色。下面是一个示例:

imagestring($image, 5, 20, 8, $str, $text_color);

这里我们选用了字体为$5$,坐标为$(20,8)$的位置,颜色为$text\_color$的验证码字符串。

4. imagecolorallocate()函数

imagecolorallocate()函数是一个用于为验证码图片分配颜色的函数。其语法如下:

int imagecolorallocate(resource $image, int $red, int $green, int $blue)

其中,$image为由imagecreate()或imagecreatetruecolor()函数创建的图像资源;$red、$green、$blue代表红、绿、蓝三色RGB颜色的亮度,最小值为0,最大值为255;该函数返回值为颜色的标识符。

常用的颜色是黑、白、红、绿、蓝等,可以使用下面的代码快速生成这些颜色:

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

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

$red = imagecolorallocate($image, 255, 0, 0);

$green = imagecolorallocate($image, 0, 255, 0);

$blue = imagecolorallocate($image, 0, 0, 255);

5. rand()函数

rand()函数是PHP中一个用于随机生成数字的函数,我们可以用它在验证码上生成随机的字符串。其语法如下:

int rand(int $min, int $max)

其中,$min 和 $max是生成的随机数的最小值和最大值。下面是一个示例:

$code_len = 4;

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

    $str .= chr(rand(97, 122));

}

这里生成的是一个长度为$4$的随机字符串。由于我们只需要生成小写字母,因此通过rand()函数生成$97$到$122$之间的随机数字,然后通过chr()函数将数字转换为字母。最终生成一个由小写字母组成的验证码字符串。

综合上述函数的使用,我们可以实现一个完整的PHP验证码生成函数。其实现步骤如下:

1.创建画布:使用imagecreatetruecolor()函数创建一个宽$100$,高$30$的真彩色图像。

2.画矩形:使用imagefilledrectangle()函数在图片上画出了一个白色的矩形。

3.生成字符串:使用rand()函数生成随机的字符串,然后使用imagestring()函数在图片上画出验证码字符串。

4.输出图片:设置header信息,输出验证码图片。

具体实现代码如下:

function create_verify_code($len=4, $width=100, $height=30) {

    $str = '';        

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

        $str .= chr(rand(97, 122));

    }        

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

    $bg_color = imagecolorallocate($image, 230, 230, 230);

    $border_color = imagecolorallocate($image, 204, 204, 204);    

    $text_color = imagecolorallocate($image, 51, 51, 51);

    

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

    imagerectangle($image, 0, 0, $width-1, $height-1, $border_color);

    

    for ($i=0; $i<strlen($str); $i++) {

        imagestring($image, 5, 20+$i*20, 8, $str{$i}, $text_color);

    }

    

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

    imagepng($image);

    imagedestroy($image);

}

运行上面的函数,即可成功生成一个验证码图片:

通常情况下,生成的验证码需要保存到服务器的数据库或文件系统中,然后再由前台用户进行请求获取。开发者在实现此功能时,只需在上述代码的最后加入以下语句:

imagepng($image, '/path/to/verify_code.png');

其中,/path/to/verify\_code.png是保存文件的路径。

这样,就完成了一个完整的PHP验证码生成函数。