效验码的功能就是为了防止网上一些非法人员使用程序暴力破解用户登录信息;在ASP,PHP以及Java/Jsp 中生成的思路基本相同,均可分为三步: 第一步:生成效验码,并存放在 session 中(这事关键); 第二步:用户访问,根据效验码图片显示的数字信息输入效验码; 第三步:在服务器端,比较在第一步中存放在 session 中效验码和用户输入的效验码是否一致; 对于效验码的生成又大概可以分为以下几步: 第一步:设置 HTTP 头信息,标识当前 HTTP 流的内容类型为一个图像流,例如:image/PNG,image/bmp,image/gif 等; 第二步:启用 session(在 asp和 java/jsp 中这个是默认打开的),生成随机数子并将其保存在 session 中; 第三步:创建一个图片对象或数据; 第四步:将随机数字写入到第三步中生成的图像中; 第五步:加入干扰图像,并最终生成一个图片数据流,释放相关的资源; 下面是一个 PHP 的例子,我已经测试过,供大家参考, 注意:要想创建图片,在 php 中要加载相关的图像函数库!
一:效验码生成页面:(checkcode.php) <?php //设置文件头; Header("Content-type: image/PNG"); //启用session; session_start(); //生成随机数; srand((double)microtime()*1000000); while(($checkcode=rand()%10000)<1000); //保存效验码到session中; $_SESSION['checkcode']=$checkcode; //生成验证码图片; $im = imagecreate(50,22); $black = ImageColorAllocate($im, 0,0,0); $white = ImageColorAllocate($im, 255,255,255); $gray = ImageColorAllocate($im, 200,200,200); imagefill($im,68,30,$gray); //将四位整数验证码绘入图片; imagestring($im, 5, 8, 3, $checkcode, $white); //加入干扰象素; for($i=0;$i<200;$i++){ $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im, rand()%70 , rand()%30 , $randcolor); } //以PNG格式将图像输出到浏览器或文件; ImagePNG($im); //销毁一图像,释放与image关联的内存; ImageDestroy($im); ?>
二:效验码输入页面:(input.php) <form name="form1" method="post" action="check.php"> <img src="checkcode.php"> <input name="checkcode" type="text" id="checkcode"> <input type="submit" name="Submit" value="提交"> </form>
三:验证页面:(check.php) <?php session_start(); $checkcode=$_SESSION['checkcode']; $checkcodeInput=$_POST['checkcode']; if($checkcode==$checkcodeInput){ echo("ok"); }else{ echo("false"); } ?> |