<!DOCTYPE >
<?xml encoding="UTF-8">
- 防止恶意破解密码、刷票、论坛灌水、刷页。
增加一种趣味性
验证码实例 - 环境要求:安装PHP扩展gd库。
实现步骤 先创建一个html页面,在创建一个PHP页面在接受html页面传入的验证码同时对验证码进行处理,最后在创建一个验证码生成文件。
<div class="line number1 index0 alt2"></div><div class="line number2 index1 alt1">html></div><div class="line number3 index2 alt2">head></div><div class="line number4 index3 alt1"> meta charset="UTF-8"></div><div class="line number5 index4 alt2"> title>登陆title></div><div class="line number6 index5 alt1">head></div><div class="line number7 index6 alt2">body></div><div class="line number8 index7 alt1"> form action="./login.php" method="post"></div><div class="line number9 index8 alt2"> img src="image_captcha.php" onclick="this.src='image_captcha.php?'+new Date().getTime();" width="200" height="200">br/></div><div class="line number10 index9 alt1"> input type="text" name="captcha" placeholder="请输入图片中的验证码">br/></div><div class="line number11 index10 alt2"> input type="submit" value="验证"></div><div class="line number12 index11 alt1"> form></div><div class="line number13 index12 alt2">body></div><div class="line number14 index13 alt1">html></div><div class="line number1 index0 alt2"><?php </code?></div><div class="line number2 index1 alt1">/**</div><div class="line number3 index2 alt2"> * 字母+数字的验证码生成</div><div class="line number4 index3 alt1"> */</div><div class="line number5 index4 alt2">// 开启session</div><div class="line number6 index5 alt1">session_start();</div><div class="line number7 index6 alt2">//1.创建黑色画布</div><div class="line number8 index7 alt1">$image = imagecreatetruecolor(100, 30);</div><div class="line number9 index8 alt2"></div><div class="line number10 index9 alt1">//2.为画布定义(背景)颜色</div><div class="line number11 index10 alt2">$bgcolor = imagecolorallocate($image, 255, 255, 255);</div><div class="line number12 index11 alt1"></div><div class="line number13 index12 alt2">//3.填充颜色</div><div class="line number14 index13 alt1">imagefill($image, 0, 0, $bgcolor);</div><div class="line number15 index14 alt2"></div><div class="line number16 index15 alt1">// 4.设置验证码内容</div><div class="line number17 index16 alt2"></div><div class="line number18 index17 alt1">//4.1 定义验证码的内容</div><div class="line number19 index18 alt2">$content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";</div><div class="line number20 index19 alt1"></div><div class="line number21 index20 alt2">//4.1 创建一个变量存储产生的验证码数据,便于用户提交核对</div><div class="line number22 index21 alt1">$captcha = "";</div><div class="line number23 index22 alt2">for ($i = 0; $i $i++) {</div><div class="line number24 index23 alt1"> // 字体大小</div><div class="line number25 index24 alt2"> $fontsize = 10;</div><div class="line number26 index25 alt1"> // 字体颜色</div><div class="line number27 index26 alt2"> $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));</div><div class="line number28 index27 alt1"> // 设置字体内容</div><div class="line number29 index28 alt2"> $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);</div><div class="line number30 index29 alt1"> $captcha .= $fontcontent;</div><div class="line number31 index30 alt2"> // 显示的坐标</div><div class="line number32 index31 alt1"> $x = ($i * 100 / 4) + mt_rand(5, 10);</div><div class="line number33 index32 alt2"> $y = mt_rand(5, 10);</div><div class="line number34 index33 alt1"> // 填充内容到画布中</div><div class="line number35 index34 alt2"> imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);</div><div class="line number36 index35 alt1">}</div><div class="line number37 index36 alt2">$_SESSION["captcha"] = $captcha;</div><div class="line number38 index37 alt1"></div><div class="line number39 index38 alt2">//4.3 设置背景干扰元素</div><div class="line number40 index39 alt1">for ($$i = 0; $i $i++) {</div><div class="line number41 index40 alt2"> $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));</div><div class="line number42 index41 alt1"> imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);</div><div class="line number43 index42 alt2">}</div><div class="line number44 index43 alt1"></div><div class="line number45 index44 alt2">//4.4 设置干扰线</div><div class="line number46 index45 alt1">for ($i = 0; $i $i++) {</div><div class="line number47 index46 alt2"> $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));</div><div class="line number48 index47 alt1"> imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);</div><div class="line number49 index48 alt2">}</div><div class="line number50 index49 alt1"></div><div class="line number51 index50 alt2">//5.向浏览器输出图片头信息</div><div class="line number52 index51 alt1">header('content-type:image/png');</div><div class="line number53 index52 alt2"></div><div class="line number54 index53 alt1">//6.输出图片到浏览器</div><div class="line number55 index54 alt2">imagepng($image);</div><div class="line number56 index55 alt1"></div><div class="line number57 index56 alt2">//7.销毁图片</div><div class="line number58 index57 alt1">imagedestroy($image);</div><div class="line number1 index0 alt2"><?php </code?></div><div class="line number2 index1 alt1">/**</div><div class="line number3 index2 alt2"> * 接受用户登陆时提交的验证码</div><div class="line number4 index3 alt1"> */</div><div class="line number5 index4 alt2">session_start();</div><div class="line number6 index5 alt1">//1. 获取到用户提交的验证码</div><div class="line number7 index6 alt2">$captcha = $_POST["captcha"];</div><div class="line number8 index7 alt1">//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交</div><div class="line number9 index8 alt2">if(strtolower($_SESSION["captchaimg"]) == strtolower($captcha)){</div><div class="line number10 index9 alt1"> echo "验证码正确!";</div><div class="line number11 index10 alt2"> $_SESSION["captcha"] = "";</div><div class="line number12 index11 alt1">}else{</div><div class="line number13 index12 alt2"> echo "验证码提交不正确!";</div><div class="line number14 index13 alt1">}</div>
评论1
暂时没有评论