当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

19.4实例:生成带有底纹的数字验证码图片

9/17/2020 9:31:19 PM 人评论

19.4实例:生成带有底纹的数字验证码图片

19.4 实例:生成带有底纹的数字验证码图片

简单地说,验证码就是网站为了防止用户利用网络“机器人”程序自动注册、登录、灌水发帖而采用的一种网络编程安全技术。

实质上,所谓的验证码,是通过网站编程实现的一项简单的功能,它就是将一串随机产生的数字或符号生成一幅图片,图片里加上一些干扰像素(防止OCR),由用户肉眼识别其中的验证码信息,然后输入表单提交网站验证,验证成功后才能使用某项功能。图形验证码干扰色越多,自动机器人程序越难把字码认出来。通常用的干扰色都有随机文字颜色、随机颜色底纹、随机文字位置、随机文字大小及随机背景花纹。

验证码的运行机制是在需要用户通过填写表单与服务器交互时,随机产生验证码的同时生成一个Session,然后通过表单递交数据与Session中保存的验证码进行比较,正确即验证码通过,否则出错提示。生成验证码图片的PHP实例程序如代码19-13所示。

代码19-13 生成带有底纹的数字验证码图片19-13.php


     01 <?php
     02 $img_height=60; 
     03 $img_width=20;
     04 
     05 for($tmpa=0; $tmpa<4; ++$tmpa)
     06 {
     07     $nmsg[$tmpa]=dechex(rand(0,15));            //
生成随机数,并转成十六进制,作为验证码
     08 }
     09 
     10 $aimg = imagecreate($img_height,$img_width);    //
生成图片
     11 imagecolorallocate($aimg, 255,255,255);         //
图片底色
     12 $black = imagecolorallocate($aimg, 0,0,0);      //
定义需要的黑色
     13 
     14 //
用黑色的矩形把图片包围
     15 imagerectangle($aimg,0,0,$img_height-1,$img_width-1,$black);
     16 
     17 //
下面的代码生成底纹,其实就是在图片上生成一些符号
     18 for($i=0; $i<100; ++$i)
     19 {
     20 //
使用*
行号作为底纹,为了使底纹看起来杂乱无章、五颜六色,需要一个个地生成,同时其位置、颜色,
     21 //
大小都用随机数
     22     imagestring($aimg,1,mt_rand(1,$img_height),mt_rand(1,$img_width),"*",
     23     imagecolorallocate($aimg,mt_rand(200,255),mt_rand(200,255),                 mt_rand(200,255)));
     24 }
     25 
     26 //
生成验证码,同样的道理,验证码一个个地输出到图片上,同时其位置、颜色,大小都用随机数
     27 for($i=0; $i<count($nmsg); ++$i)
     28 {
     29     imagestring($aimg, mt_rand(3,5),$i*$img_height/4+mt_rand(1,10),mt_rand(1,                       $img_width/4),
     30     $nmsg[$i],imagecolorallocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand                       (0,200)));
     31 }
     32 
     33 header("Content-type: image/png");
     34 imagepng($aimg);
     35 imageiestroy($aimg);
     36 ?>

【代码解析】 第05~08行代码用来生成随机数,这也是验证的关键。这段代码的执行结果如图19-16所示。每次刷新页面,都会看到验证码随机改变。

图19-16 生成带有底纹的验证码图片

上一篇:19.3图片处理

下一篇:19.5小结

相关教程

共有条评论 网友评论

验证码: 看不清楚?