你的位置:首页 > 技术文章

生成验证图片

2007-02-17 浏览:(3827) 技术文章 评论(0)

makeImg.php: 

<?php
/***********************
* 文件名:makeImg.php
* 作者:乐言(QQ:7928478)
* 主页:www.leyan.net
* 时间:2006-1-7
* 功能:生成验证图片
************************/
/*
作用:取得随机字符串
参数:
    1、(int)$length = 32 #随机字符长度,默认为32
    2、(int)$mode = 0 #随机字符类型,0为大小写英文和数字,1为数字,2为小写子木,3为大写字母,4为大小写字母,5为大写字母和数字,6为小写字母和数字
返回:取得的字符串
*/
function getCode ($length = 32, $mode = 0)
{
switch ($mode) {
  case "1":
   $str = "1234567890";
  break;
  case "2":
   $str = "abcdefghijklmnopqrstuvwxyz";
  break;
  case "3":
   $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  break;
  case "4":
   $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  break;
  case "5":
   $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  break;
  case "6":
   $str = "abcdefghijklmnopqrstuvwxyz1234567890";
  break;
  default:
   $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  break;
}
$result="";
$l=strlen($str);
for($i=0;$i<$length;$i++){
  $num = rand(0, $l);
  $result .= $str[$num];
}
return $result;
}
$authnum =getCode(4,1);
//生成验证码图片
Header("Content-type: image/JPEG");
//srand((double)microtime()*1000000);
//建立空白图片
$im = imagecreate(50,20);
//为图片分配颜色
//黑色
$black = ImageColorAllocate($im, 0,0,0); 
//白色
$white = ImageColorAllocate($im, 255,255,255); 
//灰色
$gray = ImageColorAllocate($im, 200,200,200); 
//将四位整数验证码绘入图片
imagestring($im, 5, 6, 3, $authnum, $white);
//加入干扰象素
for($i=0;$i<200;$i++) 
{
imagesetpixel($im, rand()%70, rand()%30, $gray);
}
ImageJPEG($im);
ImageDestroy($im);
?>

有人提出修改字体以及字体大小.解决办法如下:

查找: 

//将四位整数验证码绘入图片

imagestring($im, 5, 6, 3, $authnum, $white); 

替换成: 

ImageTTFText($im,16,0,5,18,$white,"simhei.ttf",$authnum); 

//ImageTTFText(int im,int size,int angle,int x,int y,int col,string fontfile,string text): 

//本函数将 TTF (TrueType Fonts) 字型文字写入图片。 

//参数: size 为字形的尺寸; 

// angle 为字型的角度,顺时针计算,0 度为水平(由左到右),90 度则为由下到上的文字; 

// x,y 二参数为文字的坐标值 (原点为左上角); 

// col 为字的颜色; 

// fontfile 为字型文件名称; 

// text 是字符串内容。 

//加入干扰象素

  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。