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