웹마스터 팁

이전에 주민등록 번호 입력 기능을 한번 올린적이 있는데요.
댓글을 보니 많은 분들이 1.1.5 버젼에 대해서 다시 문의를 주셨더군요.

저 역시 직장인인데다가 php 전공자가 아니라 질문에 하나하나 제대로 답변 못해드려서 죄송합니다.

모듈로 만들어서 배포하고 싶지만 그럴 능력이 안되서 이렇게 하드 코딩으로  배포하는점 죄송합니다.
추후 1.1.6 버젼이 나오면 현재 적용중인 사이트를 업그레이드 하면서 적용해야겠다 생각하고 있었는데 그전에 잠시 시간이 나서 수정 해봤습니다.

xe 1.1.5 버젼에 아무것도 수정하지 않은 상태에서 해당 기능만 추가 하였습니다.

* 주의 사항
 - 1.번 항목인 컬럼 추가는 아마 최초 XE 설치시에만 적용될 것으로 보입니다. 이미 xe를 사용중이신 분들은 관리자 툴을 이용해 xe_member 테이블에 char형식에 크기는 13으로 컬럼을 추가해 주셔야 합니다.
- 주민등록 번호 검사는 해당 필드에서 포커스가 나갈때 검사하는 부분(아이디 중복 검사처럼)과 등록 버튼을 눌렀을때 검사하는 두가지가 있습니다.
- 아래 소스로는 주민등록번호가 암호화 되어 저장되지 않습니다. 주민등록번호를 단순검사 목적으로 이용하실 경우에는 md5()타입으로 저장하시면 됩니다. (이 경우 컬럼은 varchar(60) 으로 설정)

function getMemberSrlByJumin($jumin) {
  $args->jumin = md5($jumin);
  $output = executeQuery('member.getMemberSrl', $args);
  return $output->data->member_srl;
}
처럼 md5()로 암호화 하셔서 검사하시면 될 겁니다. (테스트 안해봤어요 ㅎㅎ;)


1. /xe/modules/member/schemas/member.xml
 + line 10 -> <column name="jumin" type="char" size="13" />
 - XE 최초 설치일 경우 아마 위 코드로 자동으로 컬럼이 생성될 것입니다.
 - 최초 설치자가 아니거나 jumin 컬럼이 추가 되지 않은 경우 DBTool을 이용하여 컬럼을 추가해 주시면 됩니다.

2. /xe/modules/member/skins/default/filter/signup.xml
 + line 9 -> <node target="jumin" required="false" minlength="13" maxlength="13" filter="jumin"/>
 + line 18 -> <param name="jumin" target="jumin" />
 - 회원 가입 관련 xml에 jumin 항목 추가

3. /xe/modules/member/queries/insertMember.xml
 + line 14 -> <column name="jumin" var="jumin" minlength="13" maxlength="13"/>
 - 회원 가입 완료 시 jumin 필드에 데이터 추가

4. /xe/modules/member/queries/getMemberSrl.xml
 + line 12 -> <condition operation="equal" column="jumin" var="jumin" pipe="and" />
 - 중복 체크를 하기 위해 jumin 항목을 가져옴

5. /xe/modules/member/tpl/js/signup_check.js
 + line 17 수정
   if(node_name != "user_id" && node_name != "nick_name" && node_name != "email_address" && node_name != "jumin" ) continue;
 - 비동기로 중복 체크를 할 항목에 jumin 항목 추가

6. /xe/modules/member/lang/ko.lang.php
 + line 135 -> $lang->msg_exists_jumin = '이미 존재하는 주민등록 번호입니다. 계정도용이 의심 될 경우 관리자에게 연락 주세요';
 - 주민등록 번호가 중복 될 경우 표시될 텍스트 추가

 + line 136 -> $lang->msg_false_jumin_no = '잘못된 주민등록 번호 형식입니다.';
 - 주민등록 번호 형식이 잘못 되었을 경우 표시될 텍스트 추가

 + line 158 -> $lang->about_jumin = '- 를 제외한 숫자 13자리를 입력해 주세요.';
 - 주민등록 필드 하단에 표시될 설명

7. /xe/common/lang/ko.lang.php
 + line 89 -> $lang->jumin = '주민등록번호';
 - 회원 가입 폼의 주민등록 번호 항목에 표시될 이름

 + line 293 -> $lang->filter->invalid_jumin = '잘못된 %s입니다.';
 - 잘못된 주민등록 번호 입력 시 alert창 표시 내용.

8. /xe/modules/member/skins/default/signup_form.html
 + line 66 ~ 72
  <tr>
      <th scope="row">{$lang->jumin}</th>
      <td>
          <input type="password" name="jumin" value="" maxlength="13"/>
          <p>{$lang->about_jumin}</p>
      </td>
  </tr>
 - password 타입으로 주민등록 입력 폼 추가

 + line 87 ~ 96 -> 주석 처리
 - 주민등록 번호가 있으므로 생년월일 입력 필드 제거

9. /xe/modules/member/member.controller.php
 + line 403 ~ 409 추가
case 'jumin' :
// 형식 검사
if($oMemberModel->isTrueNumber($value)==false) return new Object(0,'msg_false_jumin_no');
// 중복 검사
  $member_srl = $oMemberModel->getMemberSrlByJumin($value);
  if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_jumin');
break;
- 주민등록 번호 형식 검사 및 중복 검사 호출(비동기로 확인)

 + line 427 -> 수정
$args = Context::gets('user_id','user_name','nick_name','jumin','homepage','blog','birthday','email_address','password','allow_mailing');
- 입력 항목에 jumin 필드 포함

 + line 1227  추가
 $member_srl = $oMemberModel->getMemberSrlByJumin($args->jumin);
 if($member_srl) return new Object(-1, '+ '+ 'msg_exists_jumin');
 - 주민등록 번호 중복 검사(회원 가입 등록 버튼 클릭 시 체크)

10. /xe/modules/member/member.model.php
 + line 223 ~ 230 추가
/**
* @brief jumin에 해당하는 member_srl을 구함
**/
function getMemberSrlByJumin($jumin) {
  $args->jumin = $jumin;
  $output = executeQuery('member.getMemberSrl', $args);
  return $output->data->member_srl;
}
- 주민등록 번호 중복 검사 

  + line 492 ~ 509 추가
/**
* @brief 주민등록 번호 형식 확인
**/
  function isTrueNumber($jumin) {
    $total = 0;
    for($i=0;$i<13;$i++){
        $sval = substr($jumin, $i, 1);
        if($i<8) {
            $total = $total + ($sval * ($i+2));
        }
        if($i>7&&$i<12){
            $total = $total + ($sval*($i-6));
        }
    }
        $total = $total % 11;
        $total2 = 11 - $total;
        if($total2 > 9) $total2 = $total2 % 10;
        $total = substr($jumin,12,1);
        if($total == $total2) return true;
        else return false;
    }

- 주민등록 번호 형식 검사

11. /xe/common/js/xml-js_filter.js
 + line 189 ~ 191 추가
case "jumin" :
    return juminChk(value);
break;
- 형식이  jumin일 경우 juminChk 함수 호출

 + line 200 ~ 220 추가
function juminChk(val) {
  var total = 0;
  var sval;
  for(i=0;i<13;i++){
    sval = val.substr(i,1);
    if(i<8) {
     total = total + (sval*(i+2));
    }
    if(i>7 && i < 12) {
     total = total + (sval*(i-6));
    }
  }

  total = total%11;
  var total2 = 11-total;
  if(total2>9) total2 = total2 % 10;
  total = val.charAt(12);

  if(total == total2) return true;
  else return false;
}

- 주민등록번호 형식 검사.

12. /xe/modules/member/tpl/member_info.html
 + line 93 ~ 96 추가
 <tr>
    <th scope"row"><div>{$lang->jumin}</div></th>
    <td>{substr($member_info->jumin,0,6)}-{substr($member_info->jumin,6,7)}</td>
 </tr>
 - 관리자 회원 정보에 주민등록 번호 항목 추가


위와 같이 작업 후
1. 주민등록 번호 입력 후 포커스 아웃 시 검사 성공 (형식검사 / 중복검사)
2. 주민등록 번호 입력 후 회원 가입 등록 버튼 클릭 시 검사 성공(형식검사 /중복검사)
를 확인 하였습니다.

가능하면 자주 들어와 댓글 확인 후 수정 할 부분 수정 하도록 하겠습니다.
(단 기능 수정 요청은 힘들 것 같습니다. 오류 수정 부분만 알려주세요)

다시 저는 맡은 일을 마무리 하러 가야겠네요.
도움이 되셨길 바랍니다.

태그 연관 글
  1. [2009/04/10] 웹마스터 팁 주민등록 입력 폼 1.2.0 by 개돌 *55
제목 글쓴이 날짜
회원 순위 공동순위 표시해서 뽑기(원리만 소개) 라르게덴 2009.02.13
주민등록번호 입력 폼 추가 (1.1.5 기준) [39] 개돌 2009.02.16
TortoiseSVN에서 특정 리비전 영역만 추출하기 [1] ◀CGlink▶ 2009.02.19
IIS에서 XE 설치 시 FTP 정보 등록에서 오류 조치 [4] impre 2009.02.20
플래너 최근문서(위젯)에 카테고리색 적용, Dday 적용, 지난 일정 출력 여부 조절 [7] file 주상태 2009.02.21
20메가 업로드 용량제한에 대한 이야기 ^^ [9] 만쓰별(정만) 2009.02.22
textarea 에디터를 사용하는 리플에서 태그 막기 [2] file 老姜君 2009.02.22
확장변수전용 권한설정 게시판스킨 미권한자에게 출력 (''깜박''오류?) 보고 file 0su 2009.02.25
테스트용 아이디 탈퇴 막기 [1] SMaker 2009.02.26
lighttpd 에서 XE rewrite 기능 (.htaccess) 사용하기 [2] msl2246 2009.02.28
첨부파일의 외부 무단 링크 차단하기(XE) 게시판설정 [7] file 왕초보왕따 2009.03.02
윈도우, 리눅스, 맥서버에서 이슈트래커 동작가능하게 하기 [1] file 뽀여니 2009.03.02
2003 + RWAPM + faceOff + IE7 = rewrite mod 에러 neotec 2009.03.03
Smarty 한글 메뉴얼 공개합니다. [1] 미니미 2009.03.04
이슈 트래커 소유자 변경 시 그룹별 선택 기능 file 개돌 2009.03.05
사진이 떳다 사라지는 문제 해결법 [2] 현진 2009.03.07
게시판 가로사이즈 줄이기....[초보만 클릭] [4] 유팔복 2009.03.07
svn 업으로 xe 최신본 유지하기 [2] file e~세상쉼터 2009.03.08
Faceoff 버젼에서 확장변수 마음대로 배치하기 ^^ 파파민 2009.03.13
게시물 가운데 정렬 문제 임시해결법 한신일 2009.03.15