웹마스터 팁
주민등록번호 입력 폼 추가 (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));
}
}
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
-
싸카
2009.02.16 23:56
-
개돌
2009.02.17 10:10
작업을 원격 PC로 해야되는데 원격 PC가 클립보드가 안되서 다시 일일히 타이핑해서 로컬로 옮기다 보니 빼먹은것 같습니다.
감사합니다 (__)
지적해 주신 누락 부분 수정했습니다 ^^ -
철이베베
2009.02.18 17:16
만약에 외국인이면 어떡합니까. -
개돌
2009.02.19 09:35
흠. 제가 외국인 주민등록번호 형식을 잘 몰라서 ;; 그부분은 어찌 설명을 못드리겠네요;; -
개돌
2009.02.19 11:21
잠시 삽질 좀 해보고 왔습니다.
우선 제가 알고 있는 외국인 주민등록 번호가 없어서 대충 때려 맞춰서 숫자를 입력해 보면서 테스트를 해봤고요.
1. /xe/common/lang/ko.lang.php line294 추가
$lang->filter->invalid_jumin2 = '잘못된 %s입니다.';
2. /xe/modules/member/tpl/js/signup_check.js line 37 ~ 41 추가
var response_tags = new Array('error','message');
if(name=='jumin'){ // 형식이 jumin 이면
if(obj.form.foreigner.checked==true){ // 해당 폼의 forigner체크가 true인지 ..
params['name'] = 'jumin2'; // true 이면 name을 jumin2로 변경
}
}exec_xml('member','procMemberCheckValue', params, completeMemberCheckValue, response_tags, e);
3. /xe/modules/member/skins/default/signup_form.html line 68 수정
<input type="password" name="jumin" value="" maxlength="13"/> <input type="checkbox" name="foreigner" value="1" /> 외국인 (*외국인인 경우 체크 하세요)
4. /xe/modules/member/member.controller.php line 410 ~ 416 추가
case 'jumin' :
// 형식 검사
if($oMemberModel->isTrueNumber($value)==false) return new Object(0, 'msg_false_jumin');
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByJumin($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_jumin');
break;
case 'jumin2' :
// 외국인 주민등록 번호 형식 검사
if($oMemberModel->isTrueNumber2($value)==false) return new Object(0, 'msg_false_jumin');
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByJumin($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_jumin');
break;
5. /xe/modules/member/member.model.php line 511 ~ 543 추가
function isTrueNumber2($jumin) { // 외국인 주민등록 번호 검사 폼
for($i=0;$i<13;$i++){
$buf[$i] = (int)substr($jumin,$i,1);
}$odd = (int)$buf[7]*10 + (int)$buf[8];
if($odd % 2 != 0){
return false;
}if(($buf[11]!=6)&&($buf[11]!=7)&&($buf[11]!=8)&&($buf[11]!=9)) {
return false;
}$multi = "2,3,4,5,6,7,8,9,2,3,4,5";
$multipliers = str_split(",",$multi);
$sum = 0;
for($i=0;$i<12;$i++){
$sum += (int)$buf[i]*=(int)$multipliers[$i];
}$sum==11-($sum % 11);
if($sum>=10) $sum -= 10;
$sum+=2;
if($sum>=10) $sum -= 10;
if($sum != $buf[12]){
return false;
} else {
return true;
}
}
6. /xe/common/js/xml_js_filter.js line 192 ~194 추가
case "jumin" :
return juminChk(value);
break;
case "jumin2" :
return juminChk2(value);
break;
line 225 ~ 260 추가
function juminChk2(reg_no) { // 외국인 등록번호 검사 함수
var sum = 0;
var odd = 0;
buf = new Array(13);
for (i = 0; i < 13; i++) buf[i] = parseInt(reg_no.charAt(i));odd = buf[7]*10 + buf[8];
if (odd%2 != 0) {
return false;
}if ((buf[11] != 6)&&(buf[11] != 7)&&(buf[11] != 8)&&(buf[11] != 9)) {
return false;
}
multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
for (i = 0, sum = 0; i < 12; i++) sum += (buf[i] *= multipliers[i]);
sum=11-(sum%11);
if (sum>=10) sum-=10;sum += 2;
if (sum>=10) sum-=10;
if ( sum != buf[12]) {
return false;
}
else {
return true;
}
}
line 319 ~ 323 추가
if(filter.length && filter[0]) {
for(var j=0;j<filter.length;j++) {
var filter_item = filter[j];
if(filter_item=='+ 'jumin'){ // 항목이 jumin 이면 외국인 체크 박스 확인
if(document.getElementById(filter_item).form.foreigner.checked==true){
filter_item = 'jumin2';
}
}
if(!this.executeFilter(filter_item, value)) return this.alertMsg(target, "invalid_"+filter_item);
}
}
우선 위와 같이 추가해서 테스트 해봤고요
테스트에 사용한 외국인 번호 형식은 스크립트 보시면 알수 있듯
123456 - 7890123 에서 12번째 자리(2) 는 6,7,8,9 중에 하나가 들어가면 됩니다.
또한 8,9 번째(89) 자리는 둘다 홀수 이거나 둘다 짝수여야 합니다.
그리고 마지막 자리 숫자(3)를 0~9까지 넣어보시면 하나가 맞을 겁니다.
예를 들면 자신의 주민등록 번호를 기준으로
XXXXXX - 1(짝)(짝)XX(6~9)(0~9) 형식으로 테스트해보시면 됩니다. -
예전글에 마지막 질문 및 댓글을 달았었는데...이렇게 업데이트를 해주셔서 너무 감사드립니다.
위의 싸카님이 잘된다고 하셔서 제가 왠만하면 혼자 힘으로 해보려고 노력중입니다.
모든것을 몇번씩 확인하면서 정확하게 변경부분을 올렸음에도 불구하고 아래와 같은 오류가 납니다.
즉 올바른 숫자를 입력했음에도 불구하고 잘못된 형식이라 나오며,
이상태에서 가입버튼을 누르면 승인이 됩니다.
또한 가입이 승인된 상태에서 관리자 페이지 회원 정보를 보면 아래와 같이 좌칙에만 < 표시가 나타납니다.
번거로우시겠지만 제가 어떤 부분을 잘못했는지 여부를 알려주시면 정말 감사하겠습니다.
wwww.pscore.org 에서 확인 가능합니다. 도와주세요~~ -
개돌
2009.02.19 09:29
/xe/common/js/xml_js_filtet.js 파일의
line 189 에
case "jumin" :
return juminChk(value);
break;
이 부분을욜
case "jumin" :
alert(value);
return juminChk(value);
break;
이렇게 alert()을 추가 하셔서 value 값이 어떻게 넘어오나 먼저 체크를 해보심이 어떨까 싶습니다.
마지막에 등록 버튼을 눌렀을때 해당alert이 뜨고 나서 등록/ 취소의 confirm 창이 뜨니까 바로 가입이 되지는 않을테니 저걸로 먼저 테스트를 해보세요.
그리고 /xe/modules/member/sklins/default/signup_form.html 파일의
line 66 ~ 72 에 주민등록번호 필드 추가 하신 부분에
<input type="password" 를 <input type="text"
로 바꾸셔서 입력 값이 제대로 입력 되는지도 확인 해보시고요..
우선 첫번째로 확인 사항은 이렇게 하면 되지 않을까 싶습니다. -
우여곡절끝에 제로보드를 갈아엎고 설치를 완료했습니다.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>12번째에 빨간 표시 해두었습니다. 그걸 삭제해야 관리자 페이지에 안나오더군요.한가지만 더 여쭙겠습니다.주민등록 등록 옆에 체크박스를 두어 외국인일경우 체크를 하면 주민 등록을 안해도 되는 기능을추가하고 싶은데 도와주실수 있으신지요...여하튼 너무 감사하게 잘쓰겠습니다. -
참고로 잘못된 주민등록 번호입니다 라는 오류는 해결하지 못했습니다. 임시 방편으로 입력란 밑에 나오는 형식 확인 소스를 지우고쓰고 있습니다. ㅠㅠ.....
-
개돌
2009.02.24 10:27
이 부분은 제가 도와 드리는데 한계가 있을것 같네요.
저의 경우 이런식으로 테스트를 했습니다.
chk.php 라는 페이지를 하나 제작하여 위의 주민등록번호 체크 함수를 추가 합니다.
chk.php?jumin=1234561234567 이런식으로 주민등록 번호를 입력합니다.
chk.php 에 echo 문을 써서.. 성공 실패 여부를 확인 해봅니다.
script의 경우도 마찬가지로 하나의 페이지를 만들고
<form name="frm" onsubmit="chkJumin(this.jumin.value);">
<input type="text" name="jumin">
<input type="submit" value="검사">
같은 식으로 소스를 만들어서 테스트 해봅니다. -
개돌
2009.02.24 10:23
우선 오타 지적 감사합니다. < 하나가 다 들어가 있었네요;
저의 경우는 주민등록번호가 필수 항목이 아니기에 아래와 같은 방법으로 가능할 것으로 생각됩니다.
case2 : 'jumin2' :
로 시작하는 부분을 전부 삭제
외국인 등록번호 체크 함수 제거
그리고 나머지 항목은 그대로 적용
이 경우 외국인에 체크가 되어있으면 param['name'] = 'jumin2' 로 입력이 되지만
case 문에 jumin 2가 없으므로 체크를 하지 않고 넘어갈 것 같네요 -
싸카
2009.02.24 23:01
음. thejeon 님이 말씀하신대로 잘못된 형식의 주민등록번호 입니다. 하고 팝업이 뜨고, 주민번호를 다 지워서 아무런 오류가 뜨지 않은 상태에서 가입을 누르면 가입이 되버리는 군요..;;; -
개돌
2009.02.25 10:28
제가 처음에 잘못 작성해서 싸카님이 지적해 주신 오타 부분이 잘못 되어있었네요 ^^;;
오늘 해당 서버에서 클립보드 기능이 되길래 소스 카피해와서 직접 비교해보니 알겠더라고요 ;;
function isTrueNumber($jumin) {
$total = 0;
for($i=0;$i<13;$i++){
$sval = substr($jumin, $i, 1);
if($sval<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;
}
빨간색 쳐둔 } 의 위치가 잘못되어있었습니다.
본문은 수정 해 두었고요. 위와 같이 한번 수정 해보고 알려주세요. -
알려주신 방법으로 외국인 선택박스 체크시 주민번호 없이도 가입됨을 확인했습니다. 오류는 아직까지는 못찾았습니다.정말 너무 필요하고 중요한 부분이었는데 해결을 해주셔서 감사드립니다. 시간나실때 싸카님도 말씀하셨지만 오류나는 부분 한번 봐주시면 더욱 좋겠습니다. 작은 정보공유가 이렇게 다른 사람에게 도움을 준다는걸....이제야 실감하네요...잘쓰겠습니다. 꾸벅~
-
이동일636
2009.02.28 04:26
xe/common/lang/ko.lang.php on line 24
$lang->cmd_load = '遺덈윭?ㅺ린';
도와주세요 ㅜ 딱하나 에러나오네요 ;;;; -
개돌
2009.03.02 09:43
보내주신 쪽지에 답변 보내드리긴 했는데요.
한글이 깨져서 나오시는것 같고요
해당 부분의 한글을 다시 작성하시고 텍스트에디트 툴이나 메모장에서 형식을 UTF-8로 저장하시면 될겁니다 ^^ -
가는애
2009.03.03 01:56
중복검사 이런거 다 잘되고 맨 마지막에 [등록] 버튼 누르니까 이런 에러창이 뜨면서 더이상 진행이 안됩니다 ㅠㅠ
초보자라 뭐가 잘못된 건지 잘 모르겠는데, 혹시 제가 제로보드 2번째 설치해서 컬럼이 생성 안된 걸까요?
그런데 저는 DB Tool이란 게 어떤 건지 몰라서 여기서 막혀 버렸습니다. 도와주세요........ㅠㅠ -
개돌
2009.03.03 10:04
DB Tool은 phpmyadmin 이나 mysql 용 navicat 같은 DB관리 툴을 말합니다.
xe_member 테이블에 jumin 이라는 이름으로 형식은char 혹은 varchar, 길이는 13으로 추가하시면 됩니다. -
이권묵
2009.03.03 15:44
임시 방편으로 입력란 밑에 나오는 형식 확인 소스를 지우고 쓰고 있습니다. ㅠㅠ.....
전에 이 말씀을 하셨는데요 정확히 어디인지를 좀 알고 싶군요^^
어느 파일 어느 부분을 손대지 할지 모르겠습니다~ -
개돌
2009.03.04 09:18
thejeon님이 쓰셨던 덧글 내용같은데요.. 아마 아래 부분의 소스를 지우면 될겁니다.
/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;
- 주민등록 번호 형식 검사 및 중복 검사 호출(비동기로 확인)
case 문에서 jumin 형식일 경우에만 형식 체크를 하도록 되어있으므로 case에서 해당 항목이 없다면 형식 체크를 하지 않습니다.
그리고 스크립트 부분에서만 중복처리를 하도록 작업 하셨던 걸로 기억합니다. -
이권묵
2009.03.04 16:31
감사합니다... 아 정말 감사드려요^^ -
안녕하세요. 이제 막 제로보드에 빠져서 공부도 할겸 제 사이트를 만들고자 하는 포부로 열심히 허우적 거리는 왕초보입니다.
일단 XpressEngine FaceOff 알파 버전을 사용하고 있고 기본 레이아웃으로 설정하여 하나씩 배워가고 있는데 회원가입 할 때 주민등록번호(도용을 목적이 아닌 이중 삼중 가입도 막고 성인커뮤니티 제작을 위한 조치)도 필수사항에 넣고 싶은데 방법을 알고 싶습니다.
위 내용을 살펴 봤는데 jumin 이란 항목이 없더군요.
그래서 자세하게 알고 싶어서 이렇게 댓글을 남깁니다.
답변 꼭 부탁드립니다. -
쿨키드
2009.03.17 21:45
주민등록번호 암호화시에는
member.controller.php파일에
// DB에 입력
$args->member_srl = getNextSequence();
if($args->password && !$password_is_hashed) $args->password = md5($args->password);
elseif(!$args->password) unset($args->password);
이부분 밑에 아래 부분을 추가해주시면 됩니다.
if($args->jumin && !$password_is_hashed) $args->jumin = md5($args->jumin);
elseif(!$args->jumin) unset($args->jumin); -
xe 1.2.0 버전 사용자입니다.
위 내용들을 따라했는데 잘 안돼네요.
죄송하지만 xe 1.2.0버전에서 사용할 위 수정 파일 들을 올려주실분 계신가요?
그리고 적용 방법도 같이 부탁드립니다. 제가 왕초보라서요.. ^^;; -
개돌
2009.03.23 10:55
1.2.0 에서 적용해본 결과 큰 차이가 없네요.
수정해야 될 line이 약간 틀린 부분이 몇군데 있는 것 빼고는 거의 동일하게 수정이 가능합니다.
수정을 하긴 했는데 업무 때문에 정리를 못하고 그냥 수정만 진행 해둔 상태라 수정되는 line에 대해서 현재는 설명을 드릴 상황이 못되네요. ㅠ.ㅠ -
이재명956
2009.03.25 19:06
일단... 올려주신 개돌님께 감사의 말씀을...
설명하신대로 설치해서 잘 쓰고 있습니다...
다만... 관리자 화면에서 주민번호를 이용한 회원 검색이 안되더군요.. 어느 부분을 어떻게 수정해줘야할지...
괜찮으시다면... 그 부분도 정리해서 올려주시면 고맙겠습니다.. .^^ -
개돌
2009.04.03 09:03
주민등록 번호로 검색은 생각도 안했었는데 ㅎㅎ;;
1. /xe/modules/member/lang/ko.lang.php
$lang->search_target_list = array(
'user_id' => '아이디',
'user_name' => '이름',
'nick_name' => '닉네임',
'email_address' => '메일주소',
'jumin' => '주민등록번호', // 검색 항목에 주민등록번호 추가
'regdate' => '가입일시',
'regdate_more' => '가입일시(이상)',
'regdate_less' => '가입일시(이하)',
'last_login' => '최근로그인일시',
'last_login_more' => '최근로그인일시(이상)',
'last_login_less' => '최근로그인일시(이하)',
'extra_vars' => '+ '+ '확장변수',
);
2. /xe/modules/member/member.admin.model.php
function getMemberList() {
// 검색 옵션 정리
$args->is_admin = Context::get('is_admin')=='Y'?'Y':'';
$args->is_denied = Context::get('is_denied')=='Y'?'Y':'';
$args->selected_group_srl = Context::get('selected_group_srl');
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
if($search_target && $search_keyword) {
switch($search_target) {
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_id = $search_keyword;
break;
case 'user_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_name = $search_keyword;
break;
case 'nick_name'+ ' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_nick_name = $search_keyword;
break;
case 'email_address' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_email_address = $search_keyword;
break;
case 'regdate' :
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'regdate_more' :
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'regdate_less' :
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login' :
$args->s_last_login = $search_keyword;
break;
case 'last_login_more' :
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login_less' :
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'extra_vars' :
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'jumin' :
$args->s_jumin = ereg_replace("[^0-9]","",$search_keyword);
break;
//검색 항목이 주민등록번호일 경우 s_jumin 에 검색어 저장
}
}
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
if($args->selected_group_srl) {
$query_id = 'member.getMemberListWithinGroup';
$args->sort_index = "member.member_srl";
} else {
$query_id = 'member.getMemberList';
$args->sort_index = "member_srl";
}
// 기타 변수들 정리
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
return executeQuery($query_id, $args);
}
3. /xe/modules/member/quries/getMemberList.xml
<query id="getMemberList" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="is_admin" var="is_admin" />
<condition operation="equal" column="denied" var="is_denied" pipe="and" />
<group pipe="and">
<condition operation="like" column="user_id" var="s_user_id" />
<condition operation="like" column="user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="email_address" var="s_email_address" pipe="or" />
<condition operation="like" column="extra_vars" var="s_extra_vars" pipe="or" />
<condition operation="like" column="jumin" var="s_jumin" pipe="or" />
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" />
<condition operation="more" column="member.regdate" var="s_regdate_more" pipe="or" />
<condition operation="less" column="member.regdate" var="s_regdate_less" pipe="or" />
<condition operation="more" column="member.last_login" var="s_last_login_more" pipe="or" />
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="member_srl" order="desc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
// jumin 필드 검색 추가
like 검색이므로 주민등록 번호 중 일부만 검색하면 됩니다.
operation="like" => like 를 equal로 바꿔주시면 13자리를 정확히 입력한 경우에만 검색이 됩니다. -
미쿠루
2009.04.02 18:56
-
nonoboy
2009.04.05 21:18
안녕하세요 개돌님 삽질좀 하고 있는데~
일일이 하나 다해서 따라해본결과 실행 테스트에서 로그인이 풀어지는 결과와
회원가입정보입력후 계시판으로 돌아가는 증상이 일어납니다
버젼은1.15 입니다. 링크는 http://www.19gum.com/xe/ 입니다
아마도 라인에 알려주신 부분을 삽입하는과정에서 문제가 아닐까 합니다.
차라리 강좌를 올리실때 라인과 함께 코드 어디 아래라고 알려 주시면 감이 빠를것같습니다.
스샷이라도 올려 주셔도 너무 좋을것같고요 ^^
부탁드림니다
이부분문가지고 일주일이 넘게 파고 있습니다.
뭐 이러면서 더 배워가는것이지만 저는 왕초보라서 ^^ -
안녕하세요~ 오랜만에 들렸다가....1.2.0 업뎃하고 적용했더니....잘~ 됩니다..ㅎㅎ 감사...위에 힘들어하시는 분들 생각하면 저도 캡쳐해서 드리고 싶은 마음 굴뚝같은데...시간을 한번 내보겠습니다.우선 임시방편으로.....1.1.5를 다운 받으시고...해당파일들을 한번 열어보세요...거의 달라진게 없지만 몇몇 파일들은말씀처럼 라인이 틀려져있습니다...허나 그 라인의 아래위 소스들은 변동이 없습니다..거의...그러니...1.1.5 파일로 아래위 소스 확인하시고..1.2.0 파일들에서 그 위치 찾아..쏙~ 넣어주시면 완벽해집니다..제 파일을 그냥 드리고 싶지만...저는 거기에 또 다른걸 추가 하고...해서...해깔리실까봐...아무조록 성공하시길~~참...이미 DB 형성이 다 되어있는 분은 첫번째 파일 수정..의미가 없습니다. 직접 DB에서 member폴더에jumin 이란 테이블을 넣어주셔야지요..요거 헤깔려하시는 분도 있으니..참고하시길..
-
nonoboy
2009.04.08 20:41
good idea 멍청하면 고생이라니까요ㅡ.,ㅡ thejeon 님 감사합니다 한번 해봐야겠습니다. -
개돌
2009.04.09 00:03
오늘 제가 이거 소스 찾아서 올려드리려고했었는데.. 근 시일내에 가능할지 모르겠네요..
내일도 출근하면 서버점검 있어서하루종일 삽질해야될것 같고 ㅠ.ㅠ
조만간 수정되는 부분의 함수를 통째로 정리해서 올려보도록 하겠습니다 -
nonoboy
2009.04.09 00:49
아~~~
저는 멍청한가 봅니다
정신차리고 한다고 하는데`~ 회원가입하려면
Parse error: parse error, unexpected T_CASE in /home/hosting_users/nonoboy22/www/xe/modules/member/member.controller.php on line 479
에러뜨더니 좀있다가는 회원가입 버튼 누르면 백지가 나옵니다 -
개돌
2009.04.09 15:43
오류 메시지 그대로 case 문 에서 오류가 나는것 같은데요.
case 문
case:jumin
이 근처 어딘가에 오류가 있는게 아닐까 싶습니다. -
Gary189
2009.04.09 10:10
댓글 중에 주민번호 입력안하고 확인버튼 누르면 가입이 된다고 적힌글을 봤는데요
저도 주민번호 입력안하고 확인버튼 클릭하면 회원가입이 됬었습니다.
그래서 저는 아래와 같이 추가하였습니다.
13./xe/modules/member/member.controller.php
+ line 1240 추가
$member_srl = $oMemberModel->isMisungNumber2($args->jumin);
if($member_srl) return new Object(-1, 'null_jumin');
isMisungNumber2 메소드는 null 체크하는걸로 만들면 될듯.. -
개돌
2009.04.09 15:41
위에 올린 소스내용은 주민등록 번호가 필수 항목이 아닙니다.
그래서 주민등록번호를 잘못 입력하면 잘못됐다고 표시가 되지만
입력하지 않으면 그냥 넘어가게 됩니다 ^^; -
좋은 정보 감사합니다 ^^
-
개돌
2009.04.10 17:27
-
이동일636
2009.04.27 18:14
저기요 이거는 주민번호만 맞으면 가입되는거죠? 이름이랑 주민번호랑 같이 맞아야 가입되는 그런형식은 아니죠?
제목 | 글쓴이 | 날짜 |
---|---|---|
프로필이미지, 이미지마크, 이미지이름 수정, 추가시 포인트 삭감 [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 |
/**
* @brief 주민등록 번호 형식 확인
**/
function isTrueNumber($jumin) {
$total = 0;
for($i=0;$i<13;$i++){
$sval = substr($jumin, $i, 1);
if($sval<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;
}
}
지금 방금 적용해 보았습니다~ 잘 되는군요. ^^
member.model.php 에서 두 군데 누락된 부분이 있더라구요. 에러가 나더라구욤. 색칠해 놓았습니다.
정말 고맙습니다~ 수고하시고 좋은 하루 되세요~~