クラス ValidationCode
{
// プロパティ
プライベート $width;
プライベート $height;
プライベート $codeNum;
プライベート $image;
プライベート $disturbColorNum; //干扰元素数目
プライベート $checkCode;
関数 __construct($width=80,$height=20,$codeNum=4)
{
$this->width=$width;
$this->height=$height;
$this->codeNum=$codeNum;
$number=床($幅*$高さ/15);
if($number>240-$codeNum)
{
$this->disturbColorNum=240-$codeNum;
}その他
{
$this->disturbColorNum=$number;
}
$this->checkCode=$this->createCheckcode();
}
関数getCheckCode()
{
$this->checkCodeを返す;
}
プライベート関数 createImage(){
$this->image=imagecreatetruecolor($this->幅,$this->高さ);
$backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));
imagefill($this->image,0,0,$backcolor);
$border=imagecolorallocate($this->image,0,0,0);
imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
}
プライベート関数 setDisturbColor(){
for($i=0;$idisturbColorNum;$i++){
$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
for($i=0;$i
{
$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagearc($this->image,rand(-10,$this->幅),rand(-10,$this->高さ),rand(30,300),rand(20,300),55,44,$色);
}
}
プライベート関数 OutputText($fontFace=""){
for($i=0;$icodeNum;$i++)
{
$fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));
if($fontFace=="")
{
$fontsize=rand(3,5);
$x=フロア($this->幅/$this->コード番号)*$i+5;
$y=rand(0,$this->高さ-15);
imagechar($this->image,$fontsize,$x,$y,$this->checkCode{$i},$fontcolor);
}
それ以外
{
$fontsize=rand(12,16);
$x=floor(($this->width-8)/$this->codeNum)*$i+8;
$y=rand($fontsize,$this->height-8);
imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this->checkCode{$i});
}
}
}
プライベート関数 createCheckCode(){
$code="23456789abcdefghijkmnpqrstuvwrst";
$str="";
for($i=0;$icodeNum;$i++)
{
$char=$code{rand(0,strlen($code)-1)};
$str.=$char;
}
$str; を返します
}
プライベート関数outputImage()
{
if(imagetypes()&IMG_GIF)
{
header("Content-Type:image/gif");
imagepng($this->image);
}else if(imagetypes()&IMG_JPG)
{
header("Content-Type:image/jpeg");
imagepng($this->image);
}else if(imagetypes()&IMG_PNG)
{
header("Content-Type:image/png");
imagepng($this->image);
}else if(imagetypes()&IMG_WBMP){
header("Content-Type:image/vnd.wap.wbmp");
imagepng($this->image);
}その他
{
die("PHP は画像验证码をサポートしていません");
}
}
// この方法を通じて浏览器に画像を出力します
関数 showImage($fontFace="")
{
//创建画像背景
$this->createImage();
//設置干扰元素
$this->setDisturbColor();
//向图像中随机画出文本
$this->outputText($fontFace);
//出画像
$this->outputImage();
}
関数 __destruct()
{
imagedestroy($this->image);
}
}
関数 checklogin(){
if(empty($_POST['name']))
die( '用户名は空になれません');
if(空($_POST['パスワード']))
die("密码不可空");
if($_SESSION['code']!=$_POST['vertify'])
die("验证码输入不正确".$_SESSION['code']);
$username=$_POST['name'];
$password=md5($_POST['パスワード']);
//检查は存在するか
conndb($ユーザー名,$パスワード);
}
関数 conndb($name="",$ps=""){
$conn=mysql_connect('localhost','root','123456');
if(!$conn) die("数据库连接失败".mysql_error());
mysql_select_db('5kan',$conn) または die('选择数据库失败'.mysql_error());
mysql_set_charset('utf8',$conn);
$sql="k_user から ID を選択します。ユーザー名 ='{$name}' およびパスワード ='{$ps}'";
$result=mysql_query($sql) または die("SQL语错误".mysql_error());
if(mysql_num_rows($result)>0) die("登录成功");
else die("用户名または者密码错误");
mysql_close($conn);
}
session_start();
if(!isset($_POST['randnum']))
{
$code=新しい検証コード(120,20,4);
$code->showImage("comicbd.ttf"); //页面に表示
$_SESSION['code']=$code->getCheckCode();//保存在服务器中
}
それ以外
{
checklogin();
}
?>
|