日期:2014-05-17 浏览次数:20536 次
<?php
class imageCode{
public $img_width; //验证码宽度
public $img_height; //高度
public $arr_char = array(); //验证码上显示的字符
public $font_size; //字体大小
public $img; //验证码图片
public $code_result; //要保存在session中的数或者字符串
public $line_count = 7; //噪音线数量
private $str_chars = "0123456789abcdefghjkmnpqrstuvwxyzABCEDFGHJKLMNPQRSTUVWXYZ";//验证码字符串
//构造函数
function __construct($img_width,$img_height,$font_size,$line_count){
$this->img_width = $img_width;
$this->img_height = $img_height;
$this->font_size = $font_size;
$this->line_count = $line_count;
}
//验证码生成主方法
function createCodeImg(){
$this->createGraphics();
$this->getChars();
$this->setNoiceLine();
$x = rand(2,5);
$arr_X_Y = array(array($x,rand(1,3)),array($x+$this->font_size,rand(1,4)),array($x+2*$this->font_size,rand(1,3)),array($x+3*$this->font_size,rand(1,4)));
print_r($arr_X_Y);
for($i = 0;$i< 4;$i++){
$text_color = imagecolorallocate($this->img, rand(180,250), rand(180,250), rand(180,250));
imagechar($this->img,$this->font_size,$arr_X_Y[$i][0],$arr_X_Y[$i][1],$this->arr_char[$i],$text_color);
}
}
//创建画图板
function createGraphics(){
header("Content-type: image/png");
$this->img = @imagecreatetruecolor($this->img_width, $this->img_height) or die("建立图像失败"); //创建图片
$background_color = imagecolorallocate($this->img, 250, 250, 250);
imagefill($this->img,0,0,$background_color);
$border_color = imagecolorallocate($this->img,0,0,0); //边框色
imagerectangle($this->img,0,0,$this->img_width,$this->img_height,$border_color);
}
//画噪音线
function setNoiceLine(){
for($i = 0;$i < $this->line_count;$i ++){
$x1 = rand(3,20);//开始位置
$y1 = rand(2,$this->img_height);
$x2 = rand($this->img_width-20,$this->img_width-2);//结束位置
$y2 = rand(2,$this->img_height);
$line_color = imagecolorallocate($this->img, rand(180,250), rand(180,250), rand(180,250));
imageline($this->img,$x1,$y1,$x2,$y2,$line_color);
}
}
//产生随机字符串或者加减字符
function getChars(){
$strCode = "";
if(rand(0,1) == 1){//字符串类型的 验证码
for($i = 0;$i < 4;$i ++){
$this->arr_char[$i] = $this->str_chars[rand(0,56)];
$strCode .= $this->arr_char[$i];
}
$this->code_result = $strCode;
}
else{ //加减类型验证码
$first_num = rand(1,10);
$second_num = 0;
$result = 0;
$arr_operater = array("+","-");
$operater = $arr_operater[rand(0,1)];
switch ($operater){
case "+":
$second_num = rand(0,10);
$result = $first_num + $second_num;
break;
case "-":
$second_num = rand(0,$first_num);
$result&nbs