PHP实现验证码功能

来源:互联网 发布:淘宝联盟购物车没了 编辑:程序博客网 时间:2024/04/30 10:14

//先做个记录,功能还不完善,界面还太丑

画图的时候要安装扩展库gd2,我安装的命令是sudo apt-get install php-gd,加上php版本号之后说找不到包,就多尝试几次了

captcha.php

<?php    //设置session,开启会话功能    session_start();    //设置验证码图片大小    $image = imagecreatetruecolor(100,30);//新建一个真彩色图像,第一个参数为长,第二个参数为高    //设置验证码的颜色    $bgcolor = imagecolorallocate($image,255,255,255);//#ffffff白色    //区域填充    imagefill($image,0,0,$bgcolor);//将(0,0)所在的区域填上$bgcolor的颜色    //生成随机数字    for( $i = 0; $i < 4; $i++){        //设置字体大小        $fontsize = 6;        //设置字体颜色,随机颜色 0-120深色        $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));        //设置数字        $fontcontent = rand(0,9);        //连续定义变量        $captcha_code .= $fontcontent;        //设置坐标        $x = ($i*100/4)+rand(5,10);        $y = rand(5,10);        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);    }    //存到session中作为全局变量    $_SESSION['authcode'] = $captcha_code;    //增加干扰元素,设置雪花点    for( $i = 0; $i < 200; $i++){        //设置点的颜色,50-200颜色比数字要浅,不干扰阅读        $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));        //imagesetpixel() 画一个单一元素        imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);    }    //增加干扰元素,设置横线    for( $i = 0; $i < 4; $i++){        //设置线的颜色        $linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));        imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);    }    //设置头部 image/png    header("Content-Type: image/png");    //imagepng()建立png图形函数    imagepng($image);    //imagedestroy()结束图形函数 销毁$image    imagedestroy($image); ?>

index.html

<html><head>    <meta http-equiv="content-type" content="text/html"; charset="utf-8">    <title>实现验证功能</title></head><body>    <form method="post" action="form.php">        <p>            <!-- r=echo rand();防止图片一成不变 -->            验证码:<img id="captcha_img" border="1" src="captcha.php?r=echo rand()" style="width:100px; height:30px" /><br>            <a href="index.html" onclick="document.getElementById('captcha_img').src='captcha_php?r+Math.random()'">换一个</a>        </p>        <p>            请输入验证码:<input type="text" name="authcode" value=""/>        </p>        <p>            <input type="submit" name="提交" style="padding:6px 5px;"/>        </p>    </form></body></html>

form.php

<?php  header("Content-Type:text/html;charset=utf-8");      //设置头部信息  //isset()检测变量是否设置  if(isset($_REQUEST['authcode'])){    session_start();    //strtolower()小写函数    if(strtolower($_REQUEST['authcode']) == $_SESSION['authcode']){        //跳转页面        echo "<script language=\"javascript\">";        echo "alert('输入正确!');";        echo "document.location=\"./form.php\"";        echo "</script>";    }else{        //提示以及跳转页面        echo "<script language=\"javascript\">";        echo "alert('输入错误!');";        echo "document.location=\"./form.php\"";        echo "</script>";    }    exit();  }