-
class ValidationCode
- {
- // 屬性
- private $width;
- private $priight; ;
- 私人$image;
- 私人$disturbColorNum; //幹擾元素數量
- private $checkCode;
- function __construct($width=80,$height=20,$codeNum=4)
- {
- $this->width=$width;
- $this->height=$height;
- $this->codeNum=$codeNum;
- $number=floor($width*$height/15);
- if($number> ; 240-$codeNum)
- {
- $this->disturbColorNum=240-$codeNum;
- }else
- {
- $this->disturbColorNum=$number;
- }
- $this->checkCode=$this->createCheckcode();
- }
- function getCheckCode()
- {
- return $this->checkCode;
- }
- private function 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->image) height-2),$color);
- }
- for ($i=0;$i {
- $color=imagecolorallocate($this->image, rand(0,255),rand(0,255),rand(0,255));
- imagearc($this->影像,rand(-10,$this->寬度),rand(-10,$this->;高度),rand(30,300),rand(20,300),55,44,$color );
- }
- }
- 牛皮函數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=floor($this->width/$this-> ;codeNum)*$i 5;
- $y=rand(0,$this->height -15);
- imagechar($this->圖片,$fontsize,$x,$y,$這->checkCode{$i},$fontcolor);
- }
- else
- {
- $fontsize=rand(12,16);
- $x=floor(($this ->width-8)/$this->codeNum)*$i 8;
- $y=rand( $fontsize,$this->height-8);
- imagettftext($this-> ;圖片,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this- >checkCode{$i});
- }
- }
- }
-
- private function createCheckCode(){
- $code="23456789abcdefghijkm(){
- $code="23456789abcdefghijkm 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);
- }else
- {
- die("PHP不支援圖片驗證碼");
- }
- }
- //透過此方法向瀏覽器輸出圖像
- function showImage($fontFace ="")
- {
- //圖像背景建立
- $this->createImage();
- //設定乾預元素
- $this->setDisturbColor();
- // 向圖像中隨機畫出文字
- $this->outputText($fontFace);
- // 圖像輸出
- $this->輸出影像();
- }
-
- function __destruct()
- {
- imagedestroy($this->image);
- }
- }
- function checklogin(){
- if(empty( _POST['name']))
- die( '使用者名稱不能為空');
- if(empty($_POST['password']))
- die("密碼不能為空") ;
- if($_SESSION['code']!=$_POST['vertify'])
- die("驗證碼輸入不正確".$_SESSION['code']);
-
- $username=$_POST['name'];
- $password=md5($_POST['password']);
- //檢查是否存在
- conndb($username,$password);
- }
- function conndb($name="",$ps=""){
- $conn=mysql_connect('localhost','root','123456');
- if(!$ conn) die("資料庫連線失敗".mysql_error());
- mysql_select_db('5kan',$conn) or die('選擇資料庫失敗'.mysql_error());
- mysql_set_charset('utf8', $conn);
- $sql="select id from k_user where username='{$name}' and password='{$ps}'";
- $result=mysql_query($sql) or die(" SQL語句錯誤".mysql_error());
- if(mysql_num_rows($result)>0) die("登入成功");
- else die("使用者名稱或密碼錯誤");
- mysql_close ($conn);
- }
- session_start();
- if(!isset($_POST['randnum']))
- {
- $code=new ValidationCode(120,20, 4);
- $code->showImage("comicbd.ttf"); //顯示在頁面
- $_SESSION['code']=$code->getCheckCode();//儲存在伺服器中
- }
- else
- {
- checklogin();
- }
-
- ?>
複製程式碼
| 複製程式碼