PHP函数实现验证码功能
验证码(Verification Code)是一种通过图形、声音等方式生成的一段随机字符串编码,用于防止恶意机器人等程序对一些大规模的、需要人工操作的网站进行恶意的大规模自动化操作,如注册用户、发表评论等。在网站的注册、登录、找回密码等操作中广泛使用。PHP语言提供了多种生成验证码的函数,我将从以下几个方面进行讲解:
一、生成随机字符串函数:
1. str_shuffle()函数:该函数可随机地打乱字符串,生成一个随机字符串。
2. range()函数和implode()函数:range()函数可以产生一段序列,implode()函数用于把数组元素组合成字符串,可将range()函数生成的数组进行组合,生成一个随机字符串。
3. mt_rand()函数和chr()函数:mt_rand()函数生成指定范围内的随机数,chr()函数将指定的数字转化为ASCII字符,其中rand(65,90)用于生成大写字母的ASCII码(A-Z),rand(97,122)用于生成小写字母的ASCII码(a-z),rand(48,57)用于生成数字的ASCII码(0-9)。
例如:
function randStr($len = 6){
$chars = array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9')); //合并大写字母、小写字母、数字
shuffle($chars); //打乱数组顺序
$str = implode('', array_slice($chars, 0, $len));
return $str;
}
二、生成验证码图片函数:
1. imagecreate()函数:创建一张空白图片。
2. imagecolorallocate()函数:设置图片的背景颜色。
3. imagestring()函数或imagettftext()函数:生成具体的字符和字体。
4. session_start()函数:将生成的随机字符串存到session中,以便验证时使用。
例如:
function generateCaptcha($width = 100, $height = 30, $len = 5, $font = 'arial'){
session_start();
$image = imagecreate($width, $height);
$background = imagecolorallocate($image, 238, 238, 238); //设置背景颜色
$captcha = randStr($len);//调用randStr()函数生成验证码随机字符串
$_SESSION['captcha'] = $captcha; //将生成的随机字符串存到session中
$font_file = "fonts/$font.ttf"; //指定字体
$font_size = $height * 0.6; //计算字体大小
for($i=0; $i<$len; $i++){
$font_color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150)); //生成随机颜色
$x = ($width/$len)*$i+5; //计算字符的横坐标
$y = $height/2 + $font_size/2; //计算字符的纵坐标
$angle = rand(-20, 20); //生成随机角度,实现字符扭曲效果
$text = $captcha[$i];//获取当前字符
$box = imagettfbbox($font_size, $angle, $font_file, $text);//计算字符的宽高
imagettftext($image, $font_size, $angle, $x, $y, $font_color, $font_file, $text); //生成字符
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
}
三、验证用户输入验证码:
1. session_start()函数:首先必须开启session。
2. 获取用户输入的验证码,与session中存储的验证码进行比对,判断是否输入正确。
例如:
function validateCaptcha($input, $caseSensitive = false){
session_start();
if($caseSensitive){
return $input == $_SESSION['captcha'];
}else{
return strtolower($input) == strtolower($_SESSION['captcha']);
}
}
以上便是实现验证码功能所需要的函数。总的来说,生成验证码的流程为:先生成随机字符串,然后生成图片,将随机字符串存到session中,向浏览器输出图片,最后用户输入验证码时进行验证。验证码的实现可以增强网站的安全性和用户体验,提高网站的防御能力,减少不必要的恶意攻击。
