<?php
define('THIS_SCRIPT', 'getcode');
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
session_name('GKQW_ID');
session_start();
$seccode = random(4,1);
$seccode = sprintf('%04d', $seccode);
$_SESSION['seccode']=$seccode;
//检测是否打开GD库
$gd = 1;//1使用GD库0不使用
if($gd && function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresized') && function_exists('imagecolorallocate') && function_exists('imagesetpixel') && function_exists('imagechar') && function_exists('imagepng') && function_exists('imagettftext')) {
$width = "65";//图片宽
$height = "20";//图片高
$len = "4";//生成几位验证码
$bgcolor = "#ffffff";//背景色
$noise = true;//生成杂点
$noisenum = 150;//杂点数量
$border = false;//边框
$bordercolor = "#000000";
$image = imageCreate($width, $height);
$back = getcolor($bgcolor);
$code='';
imageFilledRectangle($image, 0, 0, $width, $height, $back);
$size = $width/$len;
if($size>$height) $size=$height;
$left = ($width-$len*($size+$size/10))/$size;
for ($i=0; $i<$len; $i++)
{
        $randtext = $seccode[$i];
        $code .= $randtext;
$textColor = imageColorAllocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
$rand = rand(1,4);
if ($rand < 1 OR $rand > 4) {
$rand = 1;
}
$font = realpath("getcode/".$rand.".ttf"); 
$randsize = rand($size-$size/10, $size+$size/10);
$location = $left+($i*$size+$size/10);
@imagettftext($image, $randsize, rand(-18,18), $location, rand($size-$size/10, $size+$size/10), $textColor, $font, $randtext); 
}
if($noise == true) setnoise();
//$_SESSION['code'] = $code;
$bordercolor = getcolor($bordercolor); 
if($border==true) imageRectangle($image, 0, 0, $width-1, $height-1, $bordercolor);
header("Content-type: image/png");
imagePng($image);
imagedestroy($image);
}else{ $numbers = array
(
0 => array('3c','66','66','66','66','66','66','66','66','3c'),
1 => array('1c','0c','0c','0c','0c','0c','0c','0c','1c','0c'),
2 => array('7e','60','60','30','18','0c','06','06','66','3c'),
3 => array('3c','66','06','06','06','1c','06','06','66','3c'),
4 => array('1e','0c','7e','4c','2c','2c','1c','1c','0c','0c'),
5 => array('3c','66','06','06','06','7c','60','60','60','7e'),
6 => array('3c','66','66','66','66','7c','60','60','30','1c'),
7 => array('30','30','18','18','0c','0c','06','06','66','7e'),
8 => array('3c','66','66','66','66','3c','66','66','66','3c'),
9 => array('38','0c','06','06','3e','66','66','66','66','3c')
); for($i = 0; $i < 10; $i++) {
for($j = 0; $j < 6; $j++) {
$a1 = substr('012', mt_rand(0, 2), 1).substr('012345', mt_rand(0, 5), 1);
$a2 = substr('012345', mt_rand(0, 5), 1).substr('0123', mt_rand(0, 3), 1);
mt_rand(0, 1) == 1 ? array_push($numbers[$i], $a1) : array_unshift($numbers[$i], $a1);
mt_rand(0, 1) == 0 ? array_push($numbers[$i], $a1) : array_unshift($numbers[$i], $a2);
}
} $bitmap = array();
for($i = 0; $i < 20; $i++) {
for ($j = 0; $j < 4; $j++) {
$n = substr($seccode, $j, 1);
$bytes = $numbers[$n][$i];
$a = mt_rand(0, 14);
switch($a) {
case 1: str_replace('9', '8', $bytes); break;
case 3: str_replace('c', 'e', $bytes); break;
case 6: str_replace('3', 'b', $bytes); break;
case 8: str_replace('8', '9', $bytes); break;
case 0: str_replace('e', 'f', $bytes); break;
}
array_push($bitmap, $bytes);
}
} for ($i = 0; $i < 8; $i++) {
$a = substr('012', mt_rand(0, 2), 1) . substr('012345', mt_rand(0, 5), 1);
array_unshift($bitmap, $a);
array_push($bitmap, $a);
} $image = pack('H*', '424d9e000000000000003e000000280000002000000018000000010001000000'.
'0000600000000000000000000000000000000000000000000000FFFFFF00'.implode('', $bitmap)); header('Content-Type: image/bmp');
echo $image;
echo $seccode;
}function getcolor($color)
{
     global $image;
     $color = eregi_replace ("^#","",$color);
     $r = $color[0].$color[1];
     $r = hexdec ($r);
     $b = $color[2].$color[3];
     $b = hexdec ($b);
     $g = $color[4].$color[5];
     $g = hexdec ($g);
     $color = imagecolorallocate ($image, $r, $b, $g); 
     return $color;
}
function setnoise()
{
global $image, $width, $height, $back, $noisenum;
for ($i=0; $i<$noisenum; $i++){
$randColor = imageColorAllocate($image, rand(0, 255), rand(0, 255), rand(0, 255));  
imageSetPixel($image, rand(0, $width), rand(0, $height), $randColor);

}
function random($length, $numeric = 0) {
mt_srand((double)microtime() * 1000000);
if($numeric) {
$hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
} else {
$hash = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$max = strlen($chars) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
}
return $hash;
}
?> 

解决方案 »

  1.   

    <?php //生成验证码图片 
    Header("Content-type: image/PNG"); 
    srand((double)microtime()*1000000); 
    $im = imagecreate(62,20); 
    $black = ImageColorAllocate($im, 0,0,0); 
    $white = ImageColorAllocate($im, 255,255,255); 
    $gray = ImageColorAllocate($im, 200,200,200); 
    imagefill($im,68,30,$gray); 
    while(($authnum=rand()%100000)<10000);
    //将四位整数验证码绘入图片 
    imagestring($im, 5, 10, 3, $authnum, $black); 
    for($i=0;$i<200;$i++)   //加入干扰象素 

        $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
        imagesetpixel($im, rand()%70 , rand()%30 , $randcolor); 

    ImagePNG($im); 
    ImageDestroy($im); 
    ?>
    首先得启动GD,就可以看到效果了.你试试吧!
      

  2.   

    我一直用的就是这个。
    <?php
    //生成N位的随机码
    function getcode()
      {
         return md5(time().rand(0,10000)).md5(time().rand(0,10000));
      }
      $code=getcode();
    //$code=$_GET["code"];;
    $img=imagecreate(185,35);
    $bg_color=imagecolorallocate($img,200,200,200);
    //背景干扰点
    for($i=0;$i<=200;$i++)
    {
       $point_color=imagecolorallocate($img,rand(1,255),rand(1,255),rand(1,255));
       imagesetpixel($img,rand(1,185),rand(1,35),$point_color);
    }
     //生成五位验证码
    for($i=0;$i<=4;$i++)
    {
       $x=($i+1)*30;
       $y=rand(5,15);
       $code_n=substr($code,$i,1);//$i需要改的复杂一点,不然取出的只是前五位。
       $text_color=imagecolorallocate($img,rand(20,180),rand(20,180),rand(20,180));   //字体颜色
       imagechar($img,7,$x,$y,$code_n,$text_color);
    }
    imagegif($img);
    imagedestroy($img);
    ?>
      

  3.   

    <?php
    header("content-type:image/jpeg");
    $im=imagecreate("100px","60px");
    //定义图片的高和宽
    $str = 'ABCDEFGHIJKMNPQRSTUVWXYZ1234567890abcdefghijkmnpqrstuvwxyz'; 
    //定义用来显示在图片上的数字和字母;
    $l = strlen($str); //得到字串的长度; 
    //循环随机抽取四位前面定义的字母和数字; 
    for($i=1;$i<=4;$i++)

    $num=rand(0,$l-1); 
    //每次随机抽取一位数字;从第一个字到该字串最大长度,
    //减1是因为截取字符是从0开始起算;这样62字符任意都有可能排在其中;
    $authnum_session.= $str[$num]; 
    //将通过数字得来的字符连起来一共是四位;
    }
    $white=imagecolorallocate($im,255,255,255);
    $red=imagecolorallocate($im,255,0,0);
    imagefill($im,0,0,$white);
    //定义图片的颜色
    //$font=iconv("gb2312","utf-8","验正码");
    //如果是汉字则需要转码
    imagettftext($im,18,0,20,50,$red,"STZHONGS.TTF",$authnum_session);
    //写如文件
    for($i=0;$i<1300;$i++){
    imagesetpixel($im,mt_rand(0,100),mt_rand(0,100),$red);
    //画点与线
    }
    imageline($im,0,0,50,60,$red);
    imageline($im,100,0,0,30,$red);
    //输出线
    imagejpeg($im);
    //输出图片
    ?>