-
-
/** - * 인증 코드 클래스
- * bbs.it-home.org 편집
- */
- class ValidationCode {
- private $width;
- private $height;
- private $codeNum;
- private $image; //이미지 리소스
- private $disturbColorNum;
- private $checkCode;
- function __construct($width=80, $height=20, $codeNum=4){
- $this->width=$width;
- $this->height=$height;
- $this->codeNum=$codeNum;
- $this->checkCode=$this->createCheckCode();
- $number=floor($width*$height/15);
if( $number > 240-$codeNum){
- $this->disturbColorNum= 240-$codeNum;
- }else{
- $this->disturbColorNum=$number;
- }< /p>
}
- //이 메소드에 액세스하여 이미지를 브라우저에 출력합니다.
- function showImage($fontFace=""){
- //1단계: 이미지 생성 배경
- $this->createImage();
- //두 번째 단계: 간섭 요소 설정
- $this->setDisturbColor();
- //세 번째 단계: 무작위로 추가 이미지 텍스트 그리기
- $this->outputText($fontFace);
- //4단계: 이미지 출력
- $this->outputImage();
- }
//이 메소드를 호출하여 무작위로 생성된 인증 코드 문자열을 가져옵니다.
- function getCheckCode(){
- return $this->checkCode;
- }
- 비공개 함수 createImage( ) {
- //이미지 리소스 만들기//bbs.it-home.org
- $this->image=imagecreatetruecolor($this->width, $this->height);
- / / 임의의 배경색
- $backColor=imagecolorallocate($this->image, rand(225, 255), rand(225,255), rand(225, 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; $i<$this->disturbColorNum; $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<10; $i ){
- $color=imagecolorallocate($this-> image, rand(200, 255), rand(200, 255), rand(200, 255));
- imagearc($this->image, rand(-10, $this->width), rand (-10, $this->height), rand(30, 300), rand(20, 200), 55, 44, $color);
- }
- }
- 비공개 함수 createCheckCode() {
- //여기서 무작위 코드를 생성하는 주요 목적은 1을 l과 구별하는 것입니다
- $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
- $string='';
- for($i=0; $ i < $this->codeNum; $i ){
- $char=$code{rand(0, strlen($code)-1)};
- $string.=$char;
- }
- return $string;
- }
- 비공개 함수 outputText($fontFace=""){
- for($i=0; $i<$this->codeNum; $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 3;
- $y=rand(0 , $this->height-15);
- imagechar($this->image,$fontsize, $x, $y, $this->checkCode{$i},$fontcolor);
- } else{
- $fontsize=rand(12, 16);
- $x=floor(($this->width-8)/$this->codeNum)*$i 8;
- $ y=rand($fontSize 5, $this->height);
- imagettftext($this->image,$fontsize,rand(-30, 30),$x,$y ,$fontcolor, $fontFace , $this->checkCode{$i});
- }
- }
- }
//이미지 정보 출력
- 비공개 함수 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) //bbs.it-home.org
- } 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 __destruct(){
- imagedestroy($this->image);
- }
- }
- ?>< ; /p>
-
코드 복사
인증 코드 클래스 호출 예:
-
- session_start();
- include "validationcode.class.php";
- $code=new ValidationCode( 80, 20, 4);
- $code->showImage(); //등록 또는 로그인 페이지에 출력
- $_SESSION["code"]=$code->getCheckCode() / /인증코드를 서버에 저장
- ?>
코드 복사
|