웹마스터 팁

이번에  1.1.2로 업그레이드 하면서 전체적으로 다시 정리해 봤습니다.

1. /xe/modules/member/schemas/member.xml
 -> 최초 XE설치 시 주민등록 번호 컬럼 추가
 -> 기존의 생년월일 필드를 수정하는 방법과 주민등록 필드를 추가하는 방법 중 주민등록 필드를 추가하는 방법으로 진행 하였습니다.
  (수정하려면 소스 상에 손댈게 많아 지더군요. 생년월일 관련 된 함수 다 수정 될듯)

-> + line 10 -> <column name="jumin" type="char" size="13" />    
->  최초 DB생성시 char 13의 jumin 이라는 필드 추가

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" />

3. /xe/modules/member/queries/insertMember.xml
-> line 14 -> <column name="jumin" var="jumin" minlength="13" maxlength="13"/>
-> 가입 폼 작성 하고 회원 가입 완료 시 jumin 필드에 데이터 insert를 위해 추가

4. /xe/modules/member/queries/getMemberSrl.xml
-> line 12 -> <condition operation="equal" column="jumin" var="jumin" pipe="and" />
-> 주민등록 번호 중복 가입 체크를 위해 추가

5. /xe/modules/member/tpl/js/signup_check.js
->line 17 수정
if(node_name != "user_id" && node_name != "nick_name" && node_name != "email_address") continue;
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 ~ 94 -> 주석 처리
-> 주민등록 번호가 있으므로 생년월일 입력 필드 제거

9. /xe/modules/member/member.controller.php
-> + line 328 추가
case 'jumin' :
// 형식 검사
if($oMemberModel->isTrueNumber($value)) 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 350 -> 수정
$args = Context::gets('user_id','user_name','nick_name','homepage','blog','birthday','email_address'+ '+ ','password','allow_mailing');
$args = Context::gets('user_id'+ ','user_name','nick_name','jumin','homepage','blog'+ ','birthday','email_address','password','allow_mailing');
-> 입력 항목에 jumin 필드 포함



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

-> + line 494 추가
/**
* @brief 주민등록 번호 형식 확인
**/
function isTrueNumber($jumin) {
  $args->jumin1 = substr($jumin,0,6);
$args->jumin2 = substr($jumin,6,7);
if(strlen($args->jumin1)==6 && strlen($args->jumin2)==7) {
  $total = 0;
  for($i=0;$i<13;$i++){
    $jumin[$i] = intval($jumin[$i]);
}

$total = $jumin[0]*2 + $jumin[1]*3 + $jumin[2]*4 + $jumin[3]*5 + $jumin[4]*6 + $jumin[5]*7 + $jumin[6]*8 + $jumin[7]*9 + $jumin[8]*2 + $jumin[9]*3 + $jumin[10]*4 + $jumin[11]*5;
$total = $total%11;
$total2 = 11-$total;
if($total2>9) $total2 = $total2 % 10;
$total = $jumin[12];
if($total!=$total2) return true;
  else return false;
}
-> 주민등록 번호 형식 검사
(여기 궁금한게 있는데요 마지막에  if($total!=$total2) return true;  이부분이 원래 반대 아닌가요? 왜 저렇게 해야 적용되는지;;)

11. /xe/common/js/xml-js_filter.js
-> line 189
case "jumin" :
    return juminChk(value);
   break;

line 200
function juminChk(val) {
 var jumin1 = val.substr(0,6);
 var jumin2 = val.substr(6,7);

 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) {
   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;
}

-> 저번에 제가 잘못 올려수 수정 했습니다.
js파일에서 해당 내용 확인 후 리턴 시켜주더군요.. 이거 찾느라고 모든 js파일 다 열어보고 함수 확인하고 생난리를 ㅡㅡ;
제보 주셔서 감사합니다.

================================================================================================

현재 위와 같이 입력시 주민등록 번호를 입력 받아 회원 가입을 하는 법을 정리한 것입니다.

주말동안 생각해보니 주민등록 번호는 한번 받으면 수정이 필요없는 부분이네요..
위와 같은 상태에서 view 페이지만 조금 수정해 주면 끝인것 같습니다 ..

제가 asp초급 개발자이다 보니 php로 만든 제로보드를 커스텀 할때마다 머리가 아프네요;














모듈에 주민등록번호 추가해 주실 분 대 환영 ㅠ.ㅠ

제목 글쓴이 날짜
CentOS 6.x 에서 OpenSSL Heartbleed 취약점 업데이트 마루디자인 2016.02.23
PHP7에서 XE설치시 텍스트 다 깨져서 나올 때 꼬부기 2016.02.23
외부 페이지에서 XE 기능을 추가 할때 410contents 2016.02.25
서버의 파일권한 맞추기. 마루디자인 2016.03.01
[속도 향상] 불필요한 애드온 끄기 다미아빠 2016.03.06
호스팅 변경이나 이전시 썸네일 문제 점검사항 맥노턴 2016.03.07
CSS + HTML 메뉴 마루디자인 2016.03.10
고정도메인 host 변경하기 해피정닷컴 2016.03.11
게시판이 있는데 관리자 페이지에 나타나지 않을 경우 해결 방법 퍼니엑스이 2016.03.20
SEO 1.8.18 에서 Analytics 와 기타 탭 작동 안 하는 버그 수정법 sejin7940 2016.04.03
IIS에서 HTTPS를 사용하기 위한 SSL설정 (letsencrypt 인증서 설치, 갱신) file ehii 2016.04.13
[개발팁] Console에서 디버깅 시 발생하는 x.js Deprecated 오류 제거 하기 SimpleCode 2016.04.19
[시니시즘] XE의 XML Query 관련 팁 시니시즘 2016.04.26
사용자정의 기준으로 정렬을 했을 경우 최신글이 목록 상단으로 뜨도록 수정법 ( 현재 최신글이 하단에 뜸 ) sejin7940 2016.05.25
CentOs7에서 중국 IP 차단하기 [5] file 카르마 2016.06.02
비싼호스팅 쓰지말고 공유기로 돌리자(컴보다 더 쉽다니!!) [1] djdisodo 2016.06.04
하나의 웹서버에 php5, php7 설치하기 라온넷닷컴 2016.06.10
메인메뉴 빵조각메뉴 서로 다르게 하고 싶을때 file 미연조 2016.07.08
아이콘 폰트 축소 서비스 easylogic 2016.08.11
xe 사이트에 응용프로그램으로 오토포스팅은 안됩니다. 최윤한 2016.08.17