웹마스터 팁

이전에 주민등록 번호 입력 기능을 한번 올린적이 있는데요.
댓글을 보니 많은 분들이 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
제목 글쓴이 날짜
묻고 답하기용 게시판 [1] yunesb 2009.01.24
음악판매 [5] 물푸레646 2008.12.27
서브 메뉴 배경색 바꾸기 [4] file Chang-Jo(창조) 2007.08.17
BGM 가로스크롤바 없애는 방법.. 청개굴이 2009.06.03
글쓴이 이메일 정보 감추기 [2] 대암지기 2007.11.22
BGM 쓰시는분 게시판 에서 첨부파일 다운받을때 끊어지시죠?ㅎㅎ [4] 우리아기 2009.05.23
스프링노트 연동문제 [2] nonoboy 2009.05.21
별도 페이지 로그인방법 cornet 2009.05.21
까페 아이디 삭제후 동일 아이디로 생성하는 방법 키스메리 2009.05.15
winxp IE7 rwapm에서 한글이름파일 업로드 [12] 공수래 2007.09.17
페이지 및 게시판 메뉴 경로 [2] file 자반튀김 2009.04.15
1.2.2 업데이트 이후 위젯이 출력안되시는 분들 [1] [1] 반도체맨 2009.05.01
BNU님의 Planner XE 1.2 버젼(일정관리) [9] file 개돌 2009.04.21
[질문]회원가입시 음력생일입력 가능 한가요? [1] 신정 2009.04.27
주민등록번호 입력 폼 추가 (1.1.5 기준) [39] 개돌 2009.02.16
XE 위키에 최근 접속 페이지 정보 출력 file 개돌 2009.04.27
초보 xe1.1.5에대한질문 [3] 울프 2009.04.26
졸졸이 스토커 가두어보기 2탄(보드우측에 포함된 것처럼) [1] file 갯가 2008.04.26
게시판에서 확장 변수를 쓰는 경우 1.2.0 이상 버전으로 업그레이드하기 전에 패치하시기 바랍니다. [5] file mooo 2009.04.14
홈페이지 타이틀이 $user_lang->home ,freeboard등으로 나오는 문제 수정방법(자체해결) [1] 정박사닷컴 2009.04.18