로봇인가로 검색을 하면 10대개 정도나오는것 같습니ㅣ다.. 세션비교쿠키 뭐 토토루님의 난수생성 등등... 이것도 어찌보면 토토루님꺼랑 비슷한건데.... 점도찍고 격자무늬도 넣고.... 값을비교하는 방법으라.. 몇자적어봅니다.... 제로보드에 다시 적을라니 좀 귀찮기도 하고 해서.. 제 사이트에 조금전에 작성한것을 복사할게요.. -_-;; 참. ... 사용한 함수는 phpschool에서 본것이구요... 그걸 제로보드4 회원가입에 적용한 것입니다... 미리보기는 아래의 링크를 이용하시기 바랍니다.

미리보기 : http://www.leejinsoo.net/demo/zboard/member_join.php?group_no=1

관련사이트 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=58446


현재 이사이트에서는 토토루님의 팁과 지금 이팁 두가지 모두 적용되어있습니다..
위의 두 팁은 게시물 작성시 관련된 내용인데 이것을 회원가입시에 적용하는 방법을 알아보도록 하겠습니다.

수정/생성할 파일목록
- write_code.php (코드생성)
- code_key.php (함수)
- member_join.php
- member_join_ok.php

관련링크에서 보시면.... 코드생성 및 함수부분이 통합되어있습니다.. 만약 위의 두파일을 합치고.... member_join_ok.php에서 인클루드 할 경우 회원가입버튼 클릭시 가입되지 않고 코드생성페이지가 나타나므로 이를 분리하여 write_code.php and code_key.php로 지정하였습니다...

1. write_code.php 코드생성
아래의 소스를 복사하여 write_code.php파일로 만들어줍니다.
<?
include "code_key.php";
header("Content-type:image/png"); 
    $width= "330";
    $height="40";
        $im = imagecreate($width,$height); 
        $white = imagecolorallocate($im,255,255,255);
        $gray = imagecolorallocate($im,80,80,80);
        $rightgray = imagecolorallocate($im,204,204,204);
        // 원그리기 시작위치y 시작위치x 크기 x 크기 y
        for($i=15;$i<=585;$i+=rand(20,35)){ // 가로 시작점
        $f = rand(10,50);    // 세로 시작점
        $b = rand(3,5);        // 원의 크기
        ImageArc ($im, $i, $f, $b, $b, 0, 360, $gray); // 원 그리기
        ImageFill ($im, $i, $f, $gray); //그린원에 색채우기
    }
    // 격자 무늬 넣기
    $num = rand(0,5);
        for ($i=$num; $i<=$width; $i+=rand(15,20)){  // 가로 선
            imageline($im,$i,0,$i,$height,$rightgray);
        } 
        for ($i=$num; $i<=$height+10; $i+=rand(10,15)){ //세로 선
            imageline($im,0,$i,$width,$i,$rightgray);
    }
    $write_code = write_code($_GET[time_key]);
    // 문자 만들기
    //$text = $_zb_path."font/gulim.ttc";
    //$text = $_zb_path."font/h2mkrb.ttf";
    $text = $_zb_path."font/h2mkpb.ttf";
    $code_text = "($write_code[0])($write_code[1]) 이 코드에서 $write_code[5]"; 
    imagettftext($im, 14, 1, 10, 30, $gray, $text, iconv("EUC-KR","UTF-8",$code_text)); // 폰트크기,기울기,가로세로시작점
        imagepng($im);
        imagedestroy($im);
       
?>

2. code_key.php (함수)
아래의 소스를 복사하여 code_key.php파일로 만들어줍니다.
<?
function write_code($time_key){
    $time[0] = substr($time_key, 0, 5);
    $time[1] = substr($time_key, 5, 9);
    if(substr($time_key, 9, 1) == 0){$last_key = 5;}
    else{$last_key = substr($time_key, 9, 1);}
    
    //각 배열에 넣는다.
    for($i=0 ; $i <= 1 ; $i++){
        for($sub_i=0 ; $sub_i <= 4 ; $sub_i++){
            $array_time[$i][$sub_i] = substr($time[$i], $sub_i,1);
        }
        //각 배열의 중복 제거
        $array_time[$i] = array_unique($array_time[$i]); // 큰값 원하면 안해두 된다
        //각 배열의 합 * $time_key 의 마지막 값
        $array_time[$i] = array_sum($array_time[$i]) * $last_key;
    }
    $array_time[2] = max($array_time[0],$array_time[1]);
    $array_time[3] = min($array_time[0],$array_time[1]);
    // 맨 마지막 수 홀수 ,짝수로 큰수를 구할지 작은수를 구할지 결정
    if($last_key % 2 == 1){ //홀수라면
        $array_time[4] = 1; // 작은값을 구해라 옵션
        $array_time[5] = "작은값은?"; //한글텍스트문장
        $array_time[6] = $array_time[3]; //정답
    }
    else{
        $array_time[4] = 2; // 큰값을 구해라 옵션
        $array_time[5] = "큰값은?"; //한글텍스트문장
        $array_time[6] = $array_time[2]; //정갑
    }
    return $array_time;
}
?>

3. member_join.php
코드생성에 필요한 파일은 모두 생성하였습니다.. 이제 가입페이지에서 코드생성 및 해당코드를 입력하라는 경고문에 대해 알아보도록하겠습니다.
빨간부분을 추가하여줍니다.
//인클루드
include "lib.php";

// 키값 생성
 $key = time();
..........
..........


if(!write.name.value) { alert("이름을 입력하세요"); write.name.focus(); return false; }
if(!write.input_key.value) {alert("자동등록 방지 코드를 입력하여 주십시요");write.input_key.focus(); return false;}
..........
..........

<!-- 자신이 보여지기 원하는 위치에 기존테이블에 잘 맞추어 적당한 곳에 위치시켜줍니다. -->
 <table cellpadding="0" cellspcing="0" width="100%" border="0">
   <tr>
  <td width="350px" align="center">
  <input type="hidden" name="time_key" value="<?echo $key;?>" />
  <img src="write_code.php?time_key=<?echo $key;?>" />
  </td>
  <td width="" align="left" style="padding-left:10px;">이 문제에 <b>정답을</b> 작성하십시오.<br /><input type="text" name="input_key" style="width:150px;height:21px;" class="input" /></td>
   </tr>
 </table>


 

4. member_join_ok.php
이제 코드생성등 모든 작업이 완료되었습니다.. 마지막으로 입력한 값에 대한 비교절차만 남았습니다.  빨간부분을 추가해주시면됩니다.

// 라이브러리 함수 파일 인크루드
 include "lib.php";
 include "code_key.php";

// 자동등록(가입) 차단 Key Code
 $write_code = write_code($_POST[time_key]);
 if($write_code[6] != $_POST[input_key]) Error("자동등록 방지코드가 올바른지 확인하세요.");


** 중요
위의 write_code.php파일의 함수부분을 보시면 $text = $_zb_path."font/h2mkpb.ttf"; 라는 부분이있습니다.. 이부분은 폰트에대한 경로 부분입니다.. 이와 똑같이 사용하시려면...
bbs/ 폴더안에 font폴더를 생성하신 후 그 안에 위의 폰트체가 있어야합니다.. 없을 경우 업로드해야겠죠... 거의 대부분의 분들이 없을것 같네요.. 저도 기존에는 gulim.ttc 밖에 없었는데... 굴림체보다... 위의 HY목각파임B이 더 잘어울리는것 같아서 폰트체를 변경해보았습니다... 뭐 폰트체는 개인의 취향에 맞추어 사용하시면 되는 것이며... 반드시.... 사용하시려는 폰트를 업로드 하셔야합니다... 단 gd에서 사용하는 것이므로 gd에서 사용가능한 폰트를 이용하셔야합니다....

다음은 gd에서 사용가능한 폰트입니다.
batang.ttf, dotum.ttf, hline.ttf, gulim.ttf
(하안글 HWP 폰트)
HY순명조, HY목각파임B, HY목각B, HY목판B, HY엽서B, 휴먼옛체, 휴먼 태가람체, 휴먼 견출각진, 휴먼 엽서체, 휴먼 매직체, HY 옅은샘물M, HY 그래픽M, HY 헤드라인M, HY 엽서L, HY 중고딕, HY견고딕, HY궁서B, HY신명조, HY견명조, 새굴림

어제 적용하고 테스트 안하고 있다가 며가지 문제가 있어서 수정한 후에 위와같이 다시 올려봅니다.... 가입페이지에서 생성되는 코드의 글자 및 색상은 자신에 맞게 code_key.php 및 write_code.php파일을수정해주시면 됩니다.... 테스트결과 올바르게 작동되어지네요... 유용하게 사용하시기 바랍니다..