PHP学习笔记验证码优化

Posted Jacklovely

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP学习笔记验证码优化相关的知识,希望对你有一定的参考价值。

php代码,主要把RGB改成随机生成,不是之前固定的七种颜色了:

 1 <?php 
 2    // ob_clean();
 3    header("content-type:image/png");
 4    $width = 110;
 5    $height = 40;
 6    $img = imagecreatetruecolor($width, $height);
 7    $string = "hello";
 8    //7种颜色,存入数组
 9    $red = imagecolorallocate($img, 255, 0, 0);
10    $white = imagecolorallocate($img, 255, 255, 255);
11    $green = imagecolorallocate($img, 0, 255, 0);
12    $blue = imagecolorallocate($img, 0, 0, 255);
13    $aaa = imagecolorallocate($img, 255, 255, 0);
14    $bbb = imagecolorallocate($img, 0, 255, 255);
15    $ccc = imagecolorallocate($img, 255, 0, 255);
16    $colors = array($white,$red,$green,$blue,$aaa,$bbb,$ccc);
17    //颜色换成随机组成的RGB,每次循环都生成一次
18    $color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
19    //画点
20    for ($i=0; $i < 10; $i++) { 
21       $color1 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
22       imagesetpixel($img, mt_rand(0,$width), mt_rand(0,$height), $color1);
23    }
24    //划线
25    for ($i=0; $i < 4; $i++) { 
26       $color2 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
27       imageline($img, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $color2);
28    }
29    //生成4位验证码
30    $a1 = range(0, 9);
31    $a2 = range(a, z);
32    $a3 = range(A, Z);
33    $a4 = array_merge($a1,$a2,$a3);
34    //改用shuffle打断顺序,array_slice取出前4个字母数字。不然如果用mt_rand在循环中每次取一个,还要生成字符串,不好比对
35    shuffle($a4);
36    $a5 = array_slice($a4,0,4);
37    $num = 4;
38    $fontsize = 20;
39    for ($i=0; $i < 4; $i++) { 
40       $color3 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
41       imagettftext($img, $fontsize, mt_rand(-30,30), $width/$num*$i+5, 30, $color3, "Fonts/msyh.ttf", $a5[$i]);
42    }
43    imagepng($img);
44  ?>

html代码(后缀也是php):

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>注册</title>
 6 </head>
 7 <body>
 8     <form action="test.php" method = "get">
 9         <table>
10             <tr>
11                 <td>用户名:</td>
12                 <td><input type="text"><br/></td>
13             </tr>
14             <tr>
15                 <td>密码:</td>
16                 <td><input type="text"><br/></td>
17             </tr>
18             <tr>
19                 <td>验证码:</td>
20                 <td><input type="text" name = "txtYanZheng"><br/></td>
21             </tr>
22             <tr>
23                 <td></td>
24                 <td><img src="yanzhengma.php" id = "yanzhengma" ></form></td>
25             </tr>
26             <tr>
27                 <td><input type="submit" value="提交" ></td>
28             </tr>
29         </table>
30     <?php 
31     $var = \'
32     <script type="text/javascript">
33     onload = function(){
34         var yanzhengma = document.getElementById("yanzhengma");
35         yanzhengma.onclick = function(){
36             this.src = "yanzhengma.php?"+Math.random();
37         };
38     }
39 </script>
40 \';
41     echo $var ?>
42 </body>
43 </html>

 

以上是关于PHP学习笔记验证码优化的主要内容,如果未能解决你的问题,请参考以下文章

php学习笔记:利用gd库生成图片,并实现随机验证码

PHP学习笔记-简单的面向过程写的验证码

PHP学习笔记-简单的面向过程写的验证码

php生成各种验证码

php笔记之GD库图片创建/简单验证码

带用验证码功能的用户登录 -学习笔记