www.gusucode.com > 仿51.com的php源码 1.1 > authpage/validatecode.php

    <?php
/*
 * 作者:Bigmonster
 * 网站:http://www.foolmen.com
 * 电子邮件:ahao_150@163.com
 * 版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件
 * 发送一份给作者,欢迎大家进一步改进.
 * Copyright (C) 2006-2007 FoolMen Studio & foolmen.com 
 * Author: Bigmonster ahao_150@163.com
 * File Name: validatecode.php
 * create image validatecode.
 * 
 * Last Modified:
 * 		2006-03-13 14:41
 */

 //输入中文字符串时需要gb2312到utf8的转码函数
 require_once "convertEncoding.php";

 session_start();
 if(!session_is_registered('validatecode'))
 {
     session_register('validatecode');
 }
 $width = "150";//图片宽
 $height = "50";//图片高
 $len = "4";//生成几位验证码
 $bgcolor = "#ffffff";//背景色
 $noise = true;//生成杂点
 $noisenum = 200;//杂点数量
 $border = true;//边框
 $bordercolor = "#000000";//边框颜色
 //产生一个基于调色板的图像
 $image = imageCreate($width, $height);
 //背景颜色
 $back = getcolor($bgcolor);
 //画一矩形并用背景色填充
 imageFilledRectangle($image, 0, 0, $width, $height, $back);
 //每个验证码所占的宽度
 $size = $width/$len;
 if($size>$height)
     $size=$height;
 //左边位置
 $left = ($width-$len*($size+$size/10))/$size;
 //依次将$len个字符输出
 for ($i=0; $i<$len; $i++)
 {
	 //产生一个中文字符
     $randtext = CreateRandomGBStr(1);
	//$randtext=randStr(4,NUMBER);
     $code .= $randtext;
	 //文字颜色
	 $textColor = imageColorAllocate($image, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
	 //文字所用字体文件
	 $font = "fangZhengJianZhiJianTi.TTF";
	 //文字字号大小
	 $randsize = mt_rand($size-$size/10, $size+$size/10)*(2/3);
	 //字符位置
	 $location = $left+($i*$size+$size/10);
	 //输出字符到图象
	 ImageTTFText($image, $randsize, mt_rand(-18,18), $location, mt_rand($size-$size/10, $size+$size/10), $textColor, $font, $randtext); 
 }
 //添加图片噪声
 if($noise == true)
     setnoise();
 //将字符串验证码保存在SESSION中
 $_SESSION['validatecode'] = $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);

 /**************************************************************************/
 // 函数名: getcolor
 // 功能: 获取颜色
 /**************************************************************************/
 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;
 }
 /**************************************************************************/
 // 函数名: setnoise
 // 功能: 添加噪声点
 /**************************************************************************/
 function setnoise()
 {
	 global $image, $width, $height, $back, $noisenum;
	 for ($i=0; $i<$noisenum; $i++){
		 $randColor = imageColorAllocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));  
		 imageSetPixel($image, mt_rand(0, $width), mt_rand(0, $height), $randColor);
	 } 
 }
 /**************************************************************************/
 // 函数名: randStr
 // 功能: 产生随机字符串
 // 参数: $str 字符个数, $format 类型
 /**************************************************************************/
 function randStr($len,$format) {
           switch($format) {
                 case 'ALL':
                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break;
                 case 'CHAR':
                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
				 break;
				 case 'UPPERCHAR':
                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
				 break;
                 case 'NUMBER':
                 $chars='0123456789'; 
				 break;
                 default :
                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
                 break;
           }
     $string="";
     while(strlen($string)<$len)
     $string.=substr($chars,(mt_rand()%strlen($chars)),1);
     return $string;
 }
 /**************************************************************************/
 // 函数名: CreateRandomGBStr
 // 功能: 产生指定长度的utf8编码格式的中文字符串
 // 参数: $strLength 中文字符个数
 /**************************************************************************/
 function CreateRandomGBStr($strLength)
 {
	if(!is_int($strLength))
		return "";
	/* 每循环一次产生一个gb编码的中文字符 
     * 每个汉字由四个区位码组成 
     */ 
	$gb = "";
	for($i = 0; $i < $strLength; $i++)
	{
		//取汉字16区到55区中的任意一个
		//因为在这个区以外的汉字都挺生僻,不适合作为验证码出现
		//规律:前两位趣味从16到55
		//码位第一位为零的话第二位不能为零,第一位为9的话第二位不能为5到9中的数字
		//55区最后一行没有汉字
		//先产生前两位区位码
		$qu = mt_rand(16,55);
		if($qu == 55) { //单独处理这一区
		    //码位第一位
			$ma1 = mt_rand(0,8);
			if($ma1 == 0) {
				//码位第二位
				$ma2 = mt_rand(1,9);
			} else {
				$ma2 = mt_rand(0,9);
			}
		} else {
			//码位第一位
			$ma1 = mt_rand(0,9);
			if($ma1 == 0) {
				//码位第二位
				$ma2 = mt_rand(1,9);
			} elseif($ma1 == 9) {
				$ma2 = mt_rand(0,4);
			} else {
				$ma2 = mt_rand(0,9);
			}
		}
		$gb .= chr($qu+160) . chr(($ma1*10+$ma2)+160);
	}
	//返回utf8编码格式的中文字符串
	return gb2utf8($gb);
 }
?>