验证码

Validate.php

<?php
$w = 80;
$h = 26;
$str = array();

$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for($i=0; $i<4; $i++){
$str[$i] = $string[rand(0,35)];
$code .=$str[$i];
}
session_start();
$_SESSION['code'] = $code;

$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //设置背景色
$black = imagecolorallocate($im,0,0,0); //设置边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black);   //画一矩形框

//生成雪花背景
for($i=1; $i<200; $i++){
$x = mt_rand(1,$w-9);
$y = mt_rand(1,$h-9);
$color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagechar($im,1,$x,$y,"*",$color);
}

//将验证码写入图案
for($i=0; $i<count($str); $i++){
$x = 12 + $i *($w-13)/4;
$y = mt_rand(3,$h/3);
$color = imagecolorallocate($im,mt_rand(0,255),mt_rand(1,155),mt_rand(125,255));
imagechar($im,5,$x,$y,$str[$i],$color);
}
header("Content-type:image/jpeg");  //以jpeg格式输出,注意上面不能输出任何字符,否则出错
imagejpeg($im);
imagedestroy($im);

index.html

<html>
<head>
<script type="text/javascript" src="jquery-1.4.min.js"></script>
</head>
<body>
<input type="text" name="validate" value="" size=10 οnblur="ajax();" id="text"><img src="Validate.php" id="img1" onClick="this.src='Validate.php?'+ Math.random();">
<a οnclick="test();" href="javascript:void(0);"> 看不清</a>
<script type="text/javascript">
function test(){
document.getElementById('img1').src = "test1.php?"+ Math.random();
}
</script>
<script type="text/javascript" >
function ajax(){

$.ajax({
url:  'ajax.php',
type: "POST",
data: "validate="+$("#text").val(),
success:function(msg){
if(msg){
alert("验证码正确");
}
}
});
}
</script>
</body>
</html>

ajax.php

<?php
session_start();
$validate = strtolower($_POST['validate']);
if($validate == strtolower($_SESSION['code'])){
echo  1;
}


生成GIF动态图片验证码php
/**  
     * ImageCode 生成GIF图片验证  
     * @param $string 字符串  
     * @param $width 宽度  
     * @param $height 高度  
     * */ 
    function ImageCode($string = '', $width = 75, $height = 25)  
    {  
        $authstr = $string ? $string : ((time() % 2 == 0) ? mt_rand(1000, 9999) : mt_rand(10000, 99999));   
          
        $board_width = $width;  
        $board_height = $height;  
        // 生成一个32帧的GIF动画  
        for($i = 0; $i < 32; $i++)  
        {  
            ob_start();  
            $image = imagecreate($board_width, $board_height);  
            imagecolorallocate($image, 0,0,0);  
            // 设定文字颜色数组   
            $colorList[] = ImageColorAllocate($image, 15,73,210);  
            $colorList[] = ImageColorAllocate($image, 0,64,0);  
            $colorList[] = ImageColorAllocate($image, 0,0,64);  
            $colorList[] = ImageColorAllocate($image, 0,128,128);  
            $colorList[] = ImageColorAllocate($image, 27,52,47);  
            $colorList[] = ImageColorAllocate($image, 51,0,102);  
            $colorList[] = ImageColorAllocate($image, 0,0,145);  
            $colorList[] = ImageColorAllocate($image, 0,0,113);  
            $colorList[] = ImageColorAllocate($image, 0,51,51);  
            $colorList[] = ImageColorAllocate($image, 158,180,35);  
            $colorList[] = ImageColorAllocate($image, 59,59,59);  
            $colorList[] = ImageColorAllocate($image, 0,0,0);  
            $colorList[] = ImageColorAllocate($image, 1,128,180);  
            $colorList[] = ImageColorAllocate($image, 0,153,51);  
            $colorList[] = ImageColorAllocate($image, 60,131,1);  
            $colorList[] = ImageColorAllocate($image, 0,0,0);  
            $fontcolor = ImageColorAllocate($image, 0,0,0);  
            $gray = ImageColorAllocate($image, 245,245,245);   
              
            $color = imagecolorallocate($image, 255,255,255);  
            $color2 = imagecolorallocate($image, 255,0,0);  
              
            imagefill($image, 0, 0, $gray);  
              
            $space = 15;        // 字符间距  
            if($i > 0)          // 屏蔽第一帧  
            {  
                for ($k = 0; $k < strlen($authstr); $k++)   
                {   
                    $colorRandom = mt_rand(0,sizeof($colorList)-1);   
                    $float_top = rand(0,4);  
                    $float_left = rand(0,3);  
                    imagestring($image, 6, $space * $k, $top + $float_top, substr($authstr, $k, 1), $colorList[$colorRandom]);  
                }  
            }  
              
            for ($k = 0; $k < 20; $k++)   
            {   
                $colorRandom = mt_rand(0,sizeof($colorList)-1);   
                imagesetpixel($image, rand()%70 , rand()%15 , $colorList[$colorRandom]);   
          
            }  
            // 添加干扰线  
            for($k = 0; $k < 3; $k++)  
            {  
                $colorRandom = mt_rand(0, sizeof($colorList)-1);   
                // $todrawline = rand(0,1);  
                $todrawline = 1;  
                if($todrawline)  
                {  
                    imageline($image, mt_rand(0, $board_width), mt_rand(0,$board_height), mt_rand(0,$board_width), mt_rand(0,$board_height), $colorList[$colorRandom]);  
                }  
                else   
                {  
                    $w = mt_rand(0,$board_width);  
                    $h = mt_rand(0,$board_width);  
                    imagearc($image, $board_width - floor($w / 2) , floor($h / 2), $w, $h,  rand(90,180), rand(180,270), $colorList[$colorRandom]);  
                }  
            }  
            imagegif($image);  
            imagedestroy($image);  
            $imagedata[] = ob_get_contents();  
            ob_clean();    
            ++$i;    
        }  
          
        $gif = new GIFEncoder($imagedata);    
        Header ('Content-type:image/gif');    
        echo $gif->GetAnimation();    
    } 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值