选择显示字体大小

用php实现验证码功能


目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止ocr),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

我们这里展示了如何编写php程序实现验证码功能:

代码一:

php>
    <?php
   /*
    *   filename:    authpage.php
    *   author:   hutuworm
    *   date:   2003-04-28
    *   @copyleft    hutuworm.org
    */ 

srand((double)microtime()*1000000);

   //验证用户输入是否和验证码一致
        if(isset(&#36;http_post_vars['authinput'])) 
        {
                if(strcmp(&#36;http_post_vars['authnum'],&#36;http_post_vars['authinput'])==0)
                        echo "验证成功!";
                else
                        echo "验证失败!";
        }
   
   //生成新的四位整数验证码
        while((&#36;authnum=rand()%10000)<1000); 
    ?>
        <form action=authpage.php method=post>
        <table>
                请输入验证码:<input type=text name=authinput style="width: 80px"><br>
                <input type=submit name="验证" value="提交验证码">
                <input type=hidden name=authnum value=<? echo &#36;authnum; ?>>
                <img src=authimg.php?authnum=<? echo &#36;authnum; ?>>
        </table>
        </form>

代码二:
php><?php
 /*
    *   filename:    authimg.php
    *   author:   hutuworm
    *   date:   2003-04-28
    *   @copyleft    hutuworm.org
    */

   //生成验证码图片
        header("content-type: image/png"); 
        srand((double)microtime()*1000000);
        &#36;im = imagecreate(58,28);
        &#36;black = imagecolorallocate(&#36;im, 0,0,0);
        &#36;white = imagecolorallocate(&#36;im, 255,255,255);
        &#36;gray = imagecolorallocate(&#36;im, 200,200,200);
        imagefill(&#36;im,68,30,&#36;gray);

   //将四位整数验证码绘入图片
        imagestring(&#36;im, 5, 10, 8, &#36;http_get_vars['authnum'], &#36;black);

        for(&#36;i=0;&#36;i<50;&#36;i++)   //加入干扰象素
        {
                imagesetpixel(&#36;im, rand()%70 , rand()%30 , &#36;black);
        }

        imagepng(&#36;im);
        imagedestroy(&#36;im);
?>



本文程序在apache 2.0.45 + php 4.3.1环境下运行通过。

上文只是对验证码功能的一个简单实现,并没有考虑商用安全性问题。如果要增强安全性,将此功能投入商业应用,则可以通过以下几个步骤实现:

1. 启用session。
2. authnum在authimg.php中生成,并计算md5sum,存入session。
3. authpage.php将authinput计算md5sum后,与session中的authnum(md5sum)对比得出验证结果。


本站注:作者使用了简单的代码实现了很酷的功能。不过在添加干扰像素时的效果不是太好,大家可以看一下雨声论坛登录时的效验码(http://ror.cn/perl/ut/user_login.cgi),偶把第二段代码稍改了一下,生成了与其类似的效果。

修改后的代码如下:

php><?php
/*
 * filename: authimg.php
 * author: hutuworm
 * date: 2003-04-28
 * @copyleft hutuworm.org
 */
//生成验证码图片
header("content-type: image/png"); 
srand((double)microtime()*1000000);
&#36;im = imagecreate(62,20);
&#36;black = imagecolorallocate(&#36;im, 0,0,0);
&#36;white = imagecolorallocate(&#36;im, 255,255,255);
&#36;gray = imagecolorallocate(&#36;im, 200,200,200);
imagefill(&#36;im,68,30,&#36;gray);
while((&#36;authnum=rand()%100000)<10000);
//将四位整数验证码绘入图片
imagestring(&#36;im, 5, 10, 3, &#36;authnum, &#36;black);
for(&#36;i=0;&#36;i<200;&#36;i++) //加入干扰象素
{
  &#36;randcolor = imagecolorallocate(&#36;im,rand(0,255),rand(0,255),rand(0,255));
  imagesetpixel(&#36;im, rand()%70 , rand()%30 , &#36;randcolor);
}
imagepng(&#36;im);
imagedestroy(&#36;im);
?>

显示结果如下图:


  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons