주민등록번호 검사 소스
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 | 패거리 직위 내리기 | 그리움 | 2007.04.12 | 156 |
76 | 패거리 전쟁 승패 기록 | 그리움 | 2007.04.12 | 160 |
75 | Ctrl+Enter 패치하기 | 그리움 | 2007.04.12 | 161 |
74 | 패거리 상점 만들기 | 그리움 | 2007.04.12 | 163 |
73 | 접속화면을 멋있게 | 그리움 | 2007.04.12 | 165 |
72 | 패거리 전쟁시 적과 아군 구분 | 그리움 | 2007.04.12 | 165 |
71 | 방설명 안시 넣기 | 그리움 | 2007.04.12 | 168 |
70 | 게시판 검색 기능 추가하기 | 그리움 | 2007.04.12 | 170 |
69 | 몹과 자신을 "비교" | 그리움 | 2007.04.12 | 171 |
68 | 글자색, 배경색 15색 사용하기 | 그리움 | 2007.04.12 | 173 |
67 | 순위 소스 | 그리움 | 2007.04.12 | 174 |
66 | 안시 사용하기 | 그리움 | 2007.04.12 | 175 |
65 | 개량형 우체국 | 그리움 | 2007.04.12 | 177 |
64 | 지도 기능 | 그리움 | 2007.04.12 | 178 |
63 | 경매 소스 | 그리움 | 2007.04.12 | 180 |
62 | 암호 *****로 보이게 하기 | 그리움 | 2007.04.12 | 181 |
61 | 자기 아파트 방설명은 자기가 #2 | 그리움 | 2007.04.12 | 182 |
60 | 분신을 만드는 기술 | 그리움 | 2007.04.12 | 183 |
59 | 출구 정렬 | 그리움 | 2007.04.12 | 186 |
58 | 명성치 도입 | 그리움 | 2007.04.12 | 187 |