웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
주민등록번호 입력 폼 추가 (1.1.5 기준)
2009.02.16 16:02
이전에 주민등록 번호 입력 기능을 한번 올린적이 있는데요.
댓글을 보니 많은 분들이 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));
}
}
위와 같이 작업 후
1. 주민등록 번호 입력 후 포커스 아웃 시 검사 성공 (형식검사 / 중복검사)
2. 주민등록 번호 입력 후 회원 가입 등록 버튼 클릭 시 검사 성공(형식검사 /중복검사)
를 확인 하였습니다.
가능하면 자주 들어와 댓글 확인 후 수정 할 부분 수정 하도록 하겠습니다.
(단 기능 수정 요청은 힘들 것 같습니다. 오류 수정 부분만 알려주세요)
다시 저는 맡은 일을 마무리 하러 가야겠네요.
도움이 되셨길 바랍니다.
댓글을 보니 많은 분들이 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. 주민등록 번호 입력 후 회원 가입 등록 버튼 클릭 시 검사 성공(형식검사 /중복검사)
를 확인 하였습니다.
가능하면 자주 들어와 댓글 확인 후 수정 할 부분 수정 하도록 하겠습니다.
(단 기능 수정 요청은 힘들 것 같습니다. 오류 수정 부분만 알려주세요)
다시 저는 맡은 일을 마무리 하러 가야겠네요.
도움이 되셨길 바랍니다.
태그 연관 글
- [2009/04/10] 웹마스터 팁 주민등록 입력 폼 1.2.0 *55
댓글 39
제목 | 글쓴이 | 날짜 |
---|---|---|
프로필이미지, 이미지마크, 이미지이름 수정, 추가시 포인트 삭감 [1] | lattente | 2009.11.02 |
제로보드4->XE 데이터 이전 시 회원 정보 오류 / 포인트 문제 [10] | 개돌 | 2009.10.08 |
추천과 추천포인트 관련 팁 [8] | 고진감래 | 2009.09.30 |
이미지마크 쓸 경우 레벨아이콘 위치 바꾸기 | 고진감래 | 2009.09.30 |
까오천사님의 만기일 팁을 1.2.4에 맞게 수정했어요.
[15]
![]() | 도파 | 2009.08.27 |
회원정보 손쉽게 엑셀 파일로 저장하기 [34] | thejeon | 2009.08.05 |
확장변수에 회원정보를 넣어보자
[10]
![]() | 개돌 | 2009.06.30 |
로그인 페이지 만드는 방법 [5] | 산토 | 2009.06.12 |
별도 페이지 로그인방법 | cornet | 2009.05.21 |
주민등록 입력 폼 1.2.0
[55]
![]() | 개돌 | 2009.04.10 |
클릭마다 조회수 올리기 [1.4.0]
[12]
![]() | 지B | 2009.04.04 |
제로보드의 아이콘을 내 맘대로 변경하기...(2)
[2]
![]() | winter548 | 2009.03.23 |
제로보드의 아이콘을 내 맘대로 변경하기...(1)
[3]
![]() | winter548 | 2009.03.23 |
테스트용 아이디 탈퇴 막기 [1] | SMaker | 2009.02.26 |
주민등록번호 입력 폼 추가 (1.1.5 기준) [39] | 개돌 | 2009.02.16 |
관리자 여러명 만들기 팁
[1]
![]() | 만쓰별(정만) | 2009.02.03 |
회원약관 추가
[7]
![]() | 애치티 | 2009.01.15 |
회원정보 이미지 항목 추가 [3] | 개돌 | 2008.12.22 |
[초간단]회원팝업메뉴에 메뉴넣기 [1] | Pw-NET | 2008.11.30 |
회원 관리 리스트에 생일/설명/활동량 추가하기
[16]
![]() | 老姜君 | 2008.11.21 |