주민등록번호 검사 소스
2007.04.12 13:07
/* 주민등록번호 체크하기.
* 주민등록번호를 사용자 고유 아이디로 하여 비밀번호 분실등
* 본인 확인 목적으로 사용하고자 만들었던 주민등록 검사 소스
* 입니다. 아는분이 공개 요청을 해서 공개합니다.
*
* 2000년 5월 31일 수요일. k2club@hanmail.net
* 김광철.
*/
#include
#include
#include "mstruct.h"
#include "mextern.h"
/* return 1 : 형식이 틀렸다.
0 : 아무런 이상이 없이 성공 */
int checkid_no(char *id_no);
void player_add(fd,param,str)
int fd;
int param;
unsigned char *str;
{
short id_no[14];
char cname[10],jumin_no[15],buf[15],path[128];
int j,k,i,sw=0;
FILE *fp;
sprintf(path,"%s/%s",PLAYERPATH,"PLAYER.DAT");
switch(param) {
case 1 :
strcpy(jumin_no,str);
if(strlen(jumin_no) < 14) {
print(fd,"\n[1;31m입력된 주민등록번호 길이가 짧습니다.[0;37m");
RETURN(fd,login,88);
}
if(strlen(jumin_no) > 14) {
print(fd,"\n^[[1;31m입력된 주민등록번호 길이가 깁니다.^[[0;37m");
RETURN(fd,login,88);
}
if(checkid_no(jumin_no)) {
print(fd,"\n[1;31m입력된 주민등록번호 형식이 잘못되었습니다.[0;37m");
RETURN(fd,login,88);
}
for(i=0; i<14; i++) if(isdigit(jumin_no[i])) id_no[i]=jumin_no[i]-48;
j = id_no[0]*2+id_no[1]*3+id_no[2]*4+id_no[3]*5+id_no[4]*6+id_no[5]*7;
j += id_no[7]*8+id_no[8]*9+id_no[9]*2+id_no[10]*3+id_no[11]*4+id_no[12]*5;
j = j % 11;
k = 11 - j;
if(k > 9) k %= 10;
if(id_no[13] != k) {
print(fd,"\n[1;31m입력된 주민등록번호가 이상합니다.[0;37m");
RETURN(fd,login,88);
} else {
/* 주민등록번호의 형식에는 이상이 없다. */
if(!(fp = fopen(path,"r"))) {
print(fd,"\n[1;31mID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr[0;37m");
RETURN(fd,login,88);
}
while(fscanf(fp,"%s %s",cname,buf)) {
if(!strncmp(buf,jumin_no,14)) {
sw = 1;
break;
}
if(feof(fp)) {
break;
}
}
fclose(fp);
if(!sw) {
if(!(fp = fopen(path,"a"))) {
print(fd,"\n[1;31mID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr[0;37m");
RETURN(fd,login,88);
}
fprintf(fp,"%s %s\n",Ply[fd].ply->name,jumin_no);
fclose(fp);
} else {
print(fd,"\n[1;31m입력된 주민등록번호가 이미 존재합니다.[0;37m");
RETURN(fd, login, 88);
}
}
}
RETURN(fd,create_ply,9);
}
int checkid_no(char *id_no)
{
int Result;
int Year, Month, Day;
/* 각각 년 월 일을 십진수로 변환 처리한 후 조건에 맞는지를 체크 */
Year = (id_no[0] - '0') * 10 + (id_no[1] - '0');
Month = (id_no[2] - '0') * 10 + (id_no[3] - '0');
Day = (id_no[4] - '0') * 10 + (id_no[5] - '0');
/* 먼저 초기값을 정한다. 1 으로 일단은 만족하지 않는다로 초기화 */
Result = 1;
/* 각각을 조건에 맞는지 체크를 하고 맞으면 결과값을 0로 */
/* SET 하고 그 값을 리턴한다. */
if ((Year > 0) && (Year < 90))
if ((Month > 0) && (Month < 13))
if ((Day > 0) && (Day < 32))
if (( id_no[7] == '1') || (id_no[7] == '2'))
Result = 0; /* 모든 조건이 만족하므로 */
/* 결과 값을 리턴한다. */
return Result;
}
홈지기 "그륨"
* 주민등록번호를 사용자 고유 아이디로 하여 비밀번호 분실등
* 본인 확인 목적으로 사용하고자 만들었던 주민등록 검사 소스
* 입니다. 아는분이 공개 요청을 해서 공개합니다.
*
* 2000년 5월 31일 수요일. k2club@hanmail.net
* 김광철.
*/
#include
#include
#include "mstruct.h"
#include "mextern.h"
/* return 1 : 형식이 틀렸다.
0 : 아무런 이상이 없이 성공 */
int checkid_no(char *id_no);
void player_add(fd,param,str)
int fd;
int param;
unsigned char *str;
{
short id_no[14];
char cname[10],jumin_no[15],buf[15],path[128];
int j,k,i,sw=0;
FILE *fp;
sprintf(path,"%s/%s",PLAYERPATH,"PLAYER.DAT");
switch(param) {
case 1 :
strcpy(jumin_no,str);
if(strlen(jumin_no) < 14) {
print(fd,"\n[1;31m입력된 주민등록번호 길이가 짧습니다.[0;37m");
RETURN(fd,login,88);
}
if(strlen(jumin_no) > 14) {
print(fd,"\n^[[1;31m입력된 주민등록번호 길이가 깁니다.^[[0;37m");
RETURN(fd,login,88);
}
if(checkid_no(jumin_no)) {
print(fd,"\n[1;31m입력된 주민등록번호 형식이 잘못되었습니다.[0;37m");
RETURN(fd,login,88);
}
for(i=0; i<14; i++) if(isdigit(jumin_no[i])) id_no[i]=jumin_no[i]-48;
j = id_no[0]*2+id_no[1]*3+id_no[2]*4+id_no[3]*5+id_no[4]*6+id_no[5]*7;
j += id_no[7]*8+id_no[8]*9+id_no[9]*2+id_no[10]*3+id_no[11]*4+id_no[12]*5;
j = j % 11;
k = 11 - j;
if(k > 9) k %= 10;
if(id_no[13] != k) {
print(fd,"\n[1;31m입력된 주민등록번호가 이상합니다.[0;37m");
RETURN(fd,login,88);
} else {
/* 주민등록번호의 형식에는 이상이 없다. */
if(!(fp = fopen(path,"r"))) {
print(fd,"\n[1;31mID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr[0;37m");
RETURN(fd,login,88);
}
while(fscanf(fp,"%s %s",cname,buf)) {
if(!strncmp(buf,jumin_no,14)) {
sw = 1;
break;
}
if(feof(fp)) {
break;
}
}
fclose(fp);
if(!sw) {
if(!(fp = fopen(path,"a"))) {
print(fd,"\n[1;31mID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr[0;37m");
RETURN(fd,login,88);
}
fprintf(fp,"%s %s\n",Ply[fd].ply->name,jumin_no);
fclose(fp);
} else {
print(fd,"\n[1;31m입력된 주민등록번호가 이미 존재합니다.[0;37m");
RETURN(fd, login, 88);
}
}
}
RETURN(fd,create_ply,9);
}
int checkid_no(char *id_no)
{
int Result;
int Year, Month, Day;
/* 각각 년 월 일을 십진수로 변환 처리한 후 조건에 맞는지를 체크 */
Year = (id_no[0] - '0') * 10 + (id_no[1] - '0');
Month = (id_no[2] - '0') * 10 + (id_no[3] - '0');
Day = (id_no[4] - '0') * 10 + (id_no[5] - '0');
/* 먼저 초기값을 정한다. 1 으로 일단은 만족하지 않는다로 초기화 */
Result = 1;
/* 각각을 조건에 맞는지 체크를 하고 맞으면 결과값을 0로 */
/* SET 하고 그 값을 리턴한다. */
if ((Year > 0) && (Year < 90))
if ((Month > 0) && (Month < 13))
if ((Day > 0) && (Day < 32))
if (( id_no[7] == '1') || (id_no[7] == '2'))
Result = 0; /* 모든 조건이 만족하므로 */
/* 결과 값을 리턴한다. */
return Result;
}
홈지기 "그륨"
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
77 | 무한대전 방 데이터 Convert | 그리움 | 2007.11.23 | 491 |
76 | 몹 소환하여 소환몹이 대신 싸우게 하기 | 그리움 | 2007.11.23 | 27435 |
75 | 물건, 몹의 번호 찾아내기. | 그리움 | 2007.07.04 | 456 |
74 | *괴물이름 방폭 버그 수정 | 그리움 | 2007.04.12 | 585 |
73 | 게시판 버그 해결 방법. | 그리움 | 2007.04.12 | 528 |
72 | 연타기능 - 연타수 자동 | 그리움 | 2007.04.12 | 501 |
71 | 연타기능 - 직업별 연타 | 그리움 | 2007.04.12 | 534 |
70 | 감옥/퇴소 | 그리움 | 2007.04.12 | 390 |
69 | 운영자명령 "보고" | 그리움 | 2007.04.12 | 327 |
68 | 낚시 | 그리움 | 2007.04.12 | 338 |
67 | 방전체 공격루틴 #2 | 그리움 | 2007.04.12 | 332 |
66 | 온라인 리붓 | 그리움 | 2007.04.12 | 342 |
65 | Mordor에 있는 몹 소환 소스 | 그리움 | 2007.04.12 | 332 |
64 | 귀환장소 수정판 | 그리움 | 2007.04.12 | 313 |
63 | 프롬프트 그래프화 #2 | 그리움 | 2007.04.12 | 340 |
» | 주민등록번호 검사 소스 | 그리움 | 2007.04.12 | 476 |
61 | 프롬프트 그래프화 | 그리움 | 2007.04.12 | 315 |
60 | 이동하는 몹 | 그리움 | 2007.04.12 | 334 |
59 | 머드에서 몹 심기 | 그리움 | 2007.04.12 | 344 |
58 | 개척 소스 | 그리움 | 2007.04.12 | 354 |