首页 > php图像处理 > php生成验证码图片从入门和精通教程

php生成验证码图片从入门和精通教程

在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就可以了。

方法一,代码如下:

$authnum='';  
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";  
$list=explode(",",$ychar);//分割函数  
for($i=0;$i<4;$i++){  
$randnum=rand(0,35);  
$authnum.=$list[$randnum];//以数组的形式输出

方法二,代码如下:

private function createCheckCode() {
    for (i = 0; i < this->codeNum; i++) {
        number = rand(0, 2);
        switch (number) {
            case 0:
                rand_number = rand(48, 57);
                break; //数字
                
            case 1:
                rand_number = rand(65, 90);
                break; //大写字母
                
            case 2:
                rand_number = rand(97, 122);
                break; //小写字母
                
        }
        $asc = sprintf("%c", rand_number);
        $asc_number = asc_number . asc;
    }
    return asc_number;
}

方法三,代码如下:

<?php
srand(microtime() * 100000); //相当于计时器
$string = "abcdefghigklmnopqrstuvwxyz123456789";
for ($i = 0; $i < 4; $i++) {
    $new_number.= $string[rand(0, strlen($string) - 1) ]; //随即的产生一个数组
    
}
?>

方法四,代码如下:

<?php
for ($i = 0; $i < 4; $i++) {
    $rand.= dechex(rand(1, 15)); //将十进制转化为十六进制
    
}
?>

随机生成数字,字母的代码:

<?php
//che.php
session_start();
for ($i = 0; $i < 4; $i++) {
    $rand.= dechex(rand(1, 15));
}
$_SESSION['check_num'] = $rand;
$image = imagecreatetruecolor(50, 30);
$bg = imagecolorallocate($im, 0, 0, 0); //第一次用调色板的时候,背景颜色
$te = imagecolorallocate($im, 255, 255, 255);
imagestring($image, 6, rand(0, 20) , rand(0, 2) , $rand, $te);
ob_clean(); //PHP网页中因为 要生成验证码而出现 图像"http://localhost/**.php"因其本身有错无法显示
header("Content-type:image/jpeg");
imagejpeg($image);
?>

给图片画出干扰线代码:

<?php
for ($i = 0; $i < 8; $i++) //画出多条线
{
    $cg = imagecolorallocate($im, rand(0, 255) , rand(0, 255) , rand(0, 255)); //产生随机的颜色
    imageline($im, rand(10, 40) , 0, rand(10, 40) , 20, $cg);
}
?>

给图片画出干扰点的代码:

<?php
for ($i = 0; $i < 80; $i++) //画出多个点
{
    imagesetpixel($im, rand(0, 40) , rand(0, 20) , $cg);
}
?>

把文字写入图片代码:

<?php
$str = ('我','我','亲','亲');//存储显示的汉字
for ($i = 0; $i < 4; $i++) {
    $sss.= $str[rand(0, 3) ]; //随机显示汉字
    
}
//$str=iconv("gb2312","utf-8",$str); //汉字编码转化,我的好像不需要
imagettftext($im, 10, 0, rand(5, 60) , rand(5, 60) , $te, "simhei.ttf", $sss);
?>

最后我们结合实际分享一个完整的实例,代码如下:

<?php
/** 
 * 生成验证码图片
 *
 * @param String $word 验证码在session中的变量名称
 */
function valiCode($word = 'randcode') {
    Header("Content-type: image/gif");
    $border = 0; //是否要边框 1要:0不要
    $how = 4; //验证码位数
    $w = $how * 15; //图片宽度
    $h = 18; //图片高度
    $fontsize = 10; //字体大小
    $alpha = "abcdefghijkmnpqrstuvwxyz"; //验证码内容1:字母
    $number = "23456789"; //验证码内容2:数字
    $randcode = ""; //验证码字符串初始化
    srand((double)microtime() * 1000000); //初始化随机数种子
    $im = ImageCreate($w, $h); //创建验证图片
    /*
     * 绘制基本框架
    */
    $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
    ImageFill($im, 0, 0, $bgcolor); //填充背景色
    if ($border) {
        $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色
        ImageRectangle($im, 0, 0, $w - 1, $h - 1, $black); //绘制边框
        
    }
    /*
     * 逐位产生随机字符
    */
    for ($i = 0; $i < $how; $i++) {
        $alpha_or_number = mt_rand(0, 1); //字母还是数字
        $str = $alpha_or_number ? $alpha : $number;
        $which = mt_rand(0, strlen($str) - 1); //取哪个字符
        $code = substr($str, $which, 1); //取字符
        $j = !$i ? 4 : $j + 15; //绘字符位置
        $color3 = ImageColorAllocate($im, mt_rand(0, 100) , mt_rand(0, 100) , mt_rand(0, 100)); //字符随即颜色
        ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符
        $randcode.= $code; //逐位加入验证码字符串
        
    }
    /*
     * 如果需要添加干扰就将注释去掉
     *
     * 以下for()循环为绘背景干扰线代码
    */
    /* + -------------------------------绘背景干扰线 开始-------------------------------------------- + */
    for ($i = 0; $i < 5; $i++) //绘背景干扰线
    {
        $color1 = ImageColorAllocate($im, mt_rand(0, 255) , mt_rand(0, 255) , mt_rand(0, 255)); //干扰线颜色
        ImageArc($im, mt_rand(-5, $w) , mt_rand(-5, $h) , mt_rand(20, 300) , mt_rand(20, 200) , 55, 44, $color1); //干扰线
        
    }
    /* + -------------------------------绘背景干扰线 结束-------------------------------------- + */
    /*
     * 如果需要添加干扰就将注释去掉
     *
     * 以下for()循环为绘背景干扰点代码
    */
    /* + --------------------------------绘背景干扰点 开始------------------------------------------ + */
    for ($i = 0; $i < $how * 40; $i++) //绘背景干扰点
    {
        $color2 = ImageColorAllocate($im, mt_rand(0, 255) , mt_rand(0, 255) , mt_rand(0, 255)); //干扰点颜色
        ImageSetPixel($im, mt_rand(0, $w) , mt_rand(0, $h) , $color2); //干扰点
        
    }
    /* + --------------------------------绘背景干扰点 结束------------------------------------------ + */
    //把验证码字符串写入session  方便提交登录信息时检验验证码是否正确  例如:$_POST['randcode'] = $_SESSION['randcode']
    $_SESSION[$word] = $randcode;
    /*绘图结束*/
    Imagegif($im);
    ImageDestroy($im);
    /*绘图结束*/
}
?>
调用方法也很简单把上面实例保存img.php文件,然后在要调用的页面 
html页面如下 
<script language="javascript">  
 function refresh_code()  
 {  
  form1.imgcode.src="verifycode.php?a="+Math.random();  
 }  
</script> 
<form id="form1" name="form1" method="post" action="checkcode.php">  
  <label for="code">验证码:</label>  
  <input type="text" name="code" id="textfield" />  
  <img id="imgcode" src="VerifyCode.php" alt="验证码" />  
  <a href="javascript:refresh_code()">看不清?换一个</a>  
  <input type="submit" name="button" id="button" value="提交" />  
</form>

这要就可以实现验证码调用了,再加个提交验证验证码是否正确,代码如下:

<?php
session_start();
if ((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))) {
    print ("验证码正确,");
} else {
    print ("验证码错误,");
}
?>

这要就我们完成了从生成验证码图片和使用的整个过程了,也算是从php入门到精通验证码全部讲了。

文章地址:http://www.phprm.com/tuxiang/fs1031.html

转载随意^^请带上本文地址!

标签:php生成 图片 验证码

相关文章

发表留言