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

PHP函数实现验证码功能

发布时间:2023-06-19 15:56:29

验证码(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中,向浏览器输出图片,最后用户输入验证码时进行验证。验证码的实现可以增强网站的安全性和用户体验,提高网站的防御能力,减少不必要的恶意攻击。