주민등록번호 검사 소스

2007.04.12 13:07

그리움 조회 수:490 추천:61

/* 주민등록번호 체크하기.
* 주민등록번호를 사용자 고유 아이디로 하여 비밀번호 분실등
* 본인 확인 목적으로 사용하고자 만들었던 주민등록 검사 소스
* 입니다. 아는분이 공개 요청을 해서 공개합니다.
*
* 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입력된 주민등록번호 길이가 짧습니다.");
        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입력된 주민등록번호 형식이 잘못되었습니다.");
  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입력된 주민등록번호가 이상합니다.");
        RETURN(fd,login,88);
            } else {
              /* 주민등록번호의 형식에는 이상이 없다. */
       if(!(fp = fopen(path,"r"))) {
          print(fd,"\nID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr");
          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,"\nID 생성에 문제가 발생하였습니다. 문의 : kckim@cs.kunsan.ac.kr");
  RETURN(fd,login,88);
               }
fprintf(fp,"%s %s\n",Ply[fd].ply->name,jumin_no);

               fclose(fp);
            } else {
print(fd,"\n입력된 주민등록번호가 이미 존재합니다.");
               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;
}

홈지기 "그륨"

Home-Page Ranking
  • 1위. 헤츠리
    6266점
  • 2위. 리타
    3720점
  • 3위. 소울
    3182점
  • 4위. 블루아사
    3083점
  • 5위. 카온
    2987점
  • 6위. 호날두
    2889점
  • 7위. 패르
    2415점
  • 8위. 마천랑
    2287점
  • 9위. 카이져
    2077점
  • 10위. 암흑광마
    2003점
天外天 Ranking
1위. 야이얀廢人
2위. 시이廢人
3위. 리타廢人
4위. 호리병廢人
5위. 극악서생廢人
6위. 아톰廢人
7위. 헤츠리廢人
8위. 보현진인廢人
9위. 타요廢人
10위. 공비廢人
새롬 데이터맨 IMF


XE Login