原文连接:http://www.qqdeveloper.com/a/54.htmlphp
什么是验证码?html
借用百度的解释:验证码这个词最先是在2002年由卡内基梅隆大学的路易斯·冯·安、Manuel Blum Nicholas J.Hopper以及IBM的John Langford所提出。卡内基梅隆大学曾试图申请此词使其成为注册商标, 但该申请于2008年4月21日被拒绝。一种经常使用的CAPTCHA测试是让用户输入一个扭曲变形的图片上所显示的文字或数字,扭曲变形是为了不被光学字符识(OCR, Optical Character Recognition)之类的电脑程序自动辨识出图片上的文数字而失去效果。因为这个测试是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,人们有时称CAPTCHA是一种反向图灵测试。前端
常见的验证码哪些?编程
图像类型、语音类型、视频类型、短信类型等。下面分享几种实际案例中的图片示例。浏览器
使用验证码的好处在哪里?服务器
要说到使用验证码的好处,这确定是不少的,总结如下几点。
微信
防止恶意的破解密码。如一些黑客为了获取到用户信息,经过不一样的手段向服务器发送数据,验证猜想用户信息的准确性。session
防止恶意的刷票,论坛灌水。这种在论坛中长期存在灌水的现象,好比贴吧,不断发送帖子。如今百度贴吧已经针对用户发帖的时间作了一个时间的限制,当必定时间内发帖过可能是没法继续发帖的。函数
防止恶意的请求。如用户提交一个表单信息,经过不断向后台请求数据信息形成服务器资源的浪费,以及恶意的攻击。post
趣味性。这一点属于我的观点,当咱们提交表单的时候,如遇到一些有趣的验证码方式,可以加强用户对网站的喜好程度。
获取用户信息。这一点在现目前的站点中是家常便饭的事情了。如咱们注册一个站点的帐号,须要经过手机验证码才能够注册成功。网站在拿到用户的电话号码以后会给手机号主发送一些营销信息。
环境配置
只须要本地安装了PHP的GD扩展库便可使用。如何查看呢,建立一个PHP文件在该文件中写入<?php phpinfo();?>,访问该文件,若是查看到了GD库已经安装了,则可使用。没有的,自行安装,百度不少教程。
相关函数手册参考PHP官方连接 http://php.net/manual/zh/ref.image.php
具体代码实现
1.咱们先建立一个html页面显示验证码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="./login.php" method="post"> <img src="image_captcha.php" onclick="this.src='image_captcha.php?'+new Date().getTime();" width="200" height="200"><br/> <input type="text" name="captcha" placeholder="请输入图片中的验证码"><br/> <input type="submit" value="验证"> </form> </body> </html>
2.建立一个PHP文件,接受前端页面传入的验证码信息
<?php /** * 接受用户登录时提交的验证码 */ session_start(); //1. 获取到用户提交的验证码 $captcha = $_POST["captcha"]; //2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁以前的session值,不成功则从新提交 if(strtolower($_SESSION["captchaimg"]) == strtolower($captcha)){ echo "验证码正确!"; $_SESSION["captcha"] = ""; }else{ echo "验证码提交不正确!"; }
3.建立验证码生成PHP文件
<?php /** * 字母+数字的验证码生成 */ // 开启session session_start(); //1.建立黑色画布 $image = imagecreatetruecolor(100, 30); //2.为画布定义(背景)颜色 $bgcolor = imagecolorallocate($image, 255, 255, 255); //3.填充颜色 imagefill($image, 0, 0, $bgcolor); // 4.设置验证码内容 //4.1 定义验证码的内容 $content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //4.1 建立一个变量存储产生的验证码数据,便于用户提交核对 $captcha = ""; for ($i = 0; $i < 4; $i++) { // 字体大小 $fontsize = 10; // 字体颜色 $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); // 设置字体内容 $fontcontent = substr($content, mt_rand(0, strlen($content)), 1); $captcha .= $fontcontent; // 显示的坐标 $x = ($i * 100 / 4) + mt_rand(5, 10); $y = mt_rand(5, 10); // 填充内容到画布中 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); } $_SESSION["captcha"] = $captcha; //4.3 设置背景干扰元素 for ($$i = 0; $i < 200; $i++) { $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200)); imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor); } //4.4 设置干扰线 for ($i = 0; $i < 3; $i++) { $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200)); imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor); } //5.向浏览器输出图片头信息 header('content-type:image/png'); //6.输出图片到浏览器 imagepng($image); //7.销毁图片 imagedestroy($image);
更改内容能够关注微信公众号:小7带你玩编程