May 14, 2008 – 6:30 pm
昨天拿一个小时研究了一下PHP GD类库的使用方法,实际就是看了这本书
中的PHP图像技术一章节,感觉PHP利用GD类库操作图片的确很方便。晚上回家忽然萌生了写一个PHP图片验证码类的想法。所以就有了下面的代码,呵呵,现在贴出来,请大家多提宝贵意见,谢谢!
******************************
*@date 20080514
*@author hluan
*@package Identifying.Code.Pic.Class
*@attention Before using this class,you should use session_start();
******************************/
//session_start();
class icode
{
function __construct(){
header('Content-Type:image/png');
}
function __destruct(){
imagedestroy($png);
}
/**************************************************
*@len The length of the identifying code.
*@type 1:only number identifying code;
* 2:only letter identifying code;
* 0:number and letter identifying code.
*@attention We store identifying code in $_SESSION['icode'].
**************************************************/
function getcode($len,$type){
switch ($type){
case 1;
$str = "1234567890";
break;
case 2;
$str = "abcdefghijklmnopqrstuvwxyz";
break;
case 0;
$str = "1234567890abcdefghijklmnopqrstuvwxyz";
break;
}
$result = "";
$length = strlen($str) - 1;
$num = 0;
for ($i=0;$i<$len;$i++){
$num = rand(0,$length);
$a = $str[$num];
$result = $result.$a;
}
/*Before using it,you should use session_start()*/
$_SESSION['icode'] = $result;//Store in session.
//echo "session:".$_SESSION['icode'];
//die();
$png = imagecreate(60,30);
$white = imagecolorallocate($png,255,255,255);//background
$red = imagecolorallocate($png,255,0,0);
$blue = imagecolorallocate($png,0,0,255);
$brown = imagecolorallocate($png,100,0,0);
$black = imagecolorallocate($png,0,0,0);//Identifying Code
imagefill($png,0,0,$white);
$k = rand(0,3);
if (0 == $k){
for ($n=0;$n<60;$n++){
$y = 15*sin($n/30*pi());
imagesetpixel($png,$n,15+$y,$red);
}
}else if (1 == $k){
for ($n=0;$n<60;$n++){
$y = 15*cos($n/60*pi());
imagesetpixel($png,$n,15+$y,$red);
}
}else if (2 == $k){
for ($n=0;$n<60;$n++){
$y = 15*sin($n/45*pi());
imagesetpixel($png,$n,15+$y,$brown);
}
}else if (3 == $k){
for ($n=0;$n<60;$n++){
$y = 15*cos($n/30*pi());
imagesetpixel($png,$n,15+$y,$brown);
}
}
for ($k=0;$k<10;$k++){
$i = rand(3,60);//width
$j = rand(3,15);//height
imageline($png,$i-3,$j-3,$i,$j,$black);
}
imagestring($png,5,3,5,$result,$blue);
$icode = imagepng($png);
return $icode;
}
}
/*测试getcode代码
$icode = new icode();
$icp = $icode->getcode(6,0);
echo $icp;
*/
Posted in PHP GD, PHP | No Comments »