SSISO Community

시소당

주민번호 체크 메소드

/**
  *  <pre>
  *  주민등록번호가  올바른지  확인하여  결과를  반환한다.  (주민번호  로직1)
  *  
  *  @param  serial1  주민등록번호  앞6자리  
  *  @param  serial2  주민등록번호  뒤7자리  
  *  @return  boolean  맞으면  true,  아니면  false.
  *  </pre>
  */
public  static  boolean  isResNo(String  serial1,  String  serial2)  {

        if  (serial1.length()  !=  6)  {
                return  false;
        }  else  if  (serial2.length()  !=  7)  {
                return  false;
        }  else  {
                int  digit  =  0;
                for  (int  i  =  0;  i  <  serial1.length();  i++)  {
                        String  str_dig  =  serial1.substring(i,  i  +  1);
                        if  (str_dig.length()  <  0  ||  str_dig.length()  >  9)  {
                                digit  =  digit  +  1;
                        }
                }

                if  ((serial1  ==  "")  ||  (digit  !=  0))  {
                        return  false;
                }

                int  digit1  =  0;
                for  (int  i  =  0;  i  <  serial2.length();  i++)  {
                        String  str_dig1  =  serial2.substring(i,  i  +  1);
                        if  (str_dig1.length()  <  0  ||  str_dig1.length()  >  9)  {
                                digit1  =  digit1  +  1;
                        }
                }

                if  ((serial2  ==  "")  ||  (digit1  !=  0))  {
                        return  false;
                }

                if  (Integer.parseInt(serial1.substring(2,  3))  >  1)  {
                        return  false;
                }

                if  (Integer.parseInt(serial1.substring(4,  5))  >  3)  {
                        return  false;
                }

                if  (Integer.parseInt(serial2.substring(0,  1))  >  4
                                ||  Integer.parseInt(serial2.substring(0,  1))  ==  0)  {
                        return  false;
                }

                int  a1  =  Integer.parseInt(serial1.substring(0,  1));
                int  a2  =  Integer.parseInt(serial1.substring(1,  2));
                int  a3  =  Integer.parseInt(serial1.substring(2,  3));
                int  a4  =  Integer.parseInt(serial1.substring(3,  4));
                int  a5  =  Integer.parseInt(serial1.substring(4,  5));
                int  a6  =  Integer.parseInt(serial1.substring(5,  6));

                int  check_digit1  =  a1  *  2  +  a2  *  3  +  a3  *  4  +  a4  *  5  +  a5  *  6  +  a6
                                *  7;

                int  b1  =  Integer.parseInt(serial2.substring(0,  1));
                int  b2  =  Integer.parseInt(serial2.substring(1,  2));
                int  b3  =  Integer.parseInt(serial2.substring(2,  3));
                int  b4  =  Integer.parseInt(serial2.substring(3,  4));
                int  b5  =  Integer.parseInt(serial2.substring(4,  5));
                int  b6  =  Integer.parseInt(serial2.substring(5,  6));
                int  b7  =  Integer.parseInt(serial2.substring(6,  7));

                int  check_digit  =  check_digit1  +  b1  *  8  +  b2  *  9  +  b3  *  2  +  b4  *  3
                                +  b5  *  4  +  b6  *  5;

                check_digit  =  check_digit  %  11;
                check_digit  =  11  -  check_digit;
                check_digit  =  check_digit  %  10;

                if  (check_digit  !=  b7)  {
                        return  false;
                }  else  {
                        return  true;
                }
        }
}

/**
  *  <pre>
  *  주민등록번호를  받아서  유효한  주민등록번호인지  확인  (주민번호  로직2)
  *  
  *  @param  resNo  String  형태의  주민등록번호
  *  @return  boolean  유효한  주민등록번호인지  여부  true/false
  *  </pre>
  */
public  static  boolean  isResNo(String  resNo)  {
        int  sum;
        String  checkNumber  =  "234567892345";  //  주민등록번호  검사용  값
        String  birthDate  =  "";

        sum  =  0;
        try  {
                if  (resNo  !=  null)  {
                        //  주민등록번호  자리수가  맞는가를  확인한다.
                        if  (resNo.length()  ==  13)  {
                                //  주민등록번호의  뒷  부분  첫  자리가  형식에  맞는지  확인한다.
                                if  (Integer.parseInt(resNo.substring(6,  7))  <  1
                                                ||  Integer.parseInt(resNo.substring(6,  7))  >  4)  {
                                        return  false;
                                }  else  {
                                        switch  (Integer.parseInt(resNo.substring(6,  7)))  {
                                        case  1:
                                                birthDate  =  "19"  +  resNo.substring(0,  6);
                                                break;
                                        case  2:
                                                birthDate  =  "19"  +  resNo.substring(0,  6);
                                                break;
                                        case  3:
                                                birthDate  =  "20"  +  resNo.substring(0,  6);
                                                break;
                                        case  4:
                                                birthDate  =  "20"  +  resNo.substring(0,  6);
                                                break;
                                        }
                                        if  (isValidDate(birthDate))  {  //  주민등록번호  앞  자리가  유효한  날짜인가
                                                                                                        //  점검
                                                for  (int  i  =  1;  i  <  13;  i++)  {  //  주민등록번호  끝  자리  점검  식
                                                        sum  =  sum
                                                                        +  Integer.parseInt(resNo.substring(
                                                                                        i  -  1,  i))
                                                                        *  Integer.parseInt(checkNumber
                                                                                        .substring(i  -  1,  i));
                                                }

                                                sum  =  11  -  (sum  %  11);
                                                if  (Integer.parseInt(resNo.substring(12,  13))  ==  (sum  %  10))  {
                                                        return  true;
                                                }  else  {
                                                        return  false;
                                                }
                                        }  else  {
                                                return  false;
                                        }
                                }
                        }  else  {
                                return  false;
                        }
                }  else  {
                        return  false;
                }
        }  catch  (Exception  e)  {  //  숫자가  아닌  값이  넘어  왔을  경우에는  exception에서  false  처리가
                                                        //  된다.
                return  false;
        }
}

/**
  *  <pre>
  *  외국인을  위해  발급된  주민번호에  대한  Validation  체크를  한다.
  *  외국인에게는  뒷자리가  5,6,7,8,9,0  으로  시작하는  주민번호가  발급된다.
  *  
  *  &lt;외국인  주민번호  routine&gt;
  *  
  *  외국인이  우리나라에  90일  이상  체류할  목적으로  들어오는  경우
  *  법무부산하  출입국관리사무소에  외국인등록을  하여야  한다.
  *  이때  부여되는  등록번호를  외국인등록번호라  하는데,
  *  우리나라  국민의  주민등록번호와는  자릿수는  같지만
  *  생성체계가  약간  틀리다.
  *  
  *  외국인등록번호  체계는  다음과  같다.
  *  000000-1234567
  *  
  *  앞의  6자리는  생년월일
  *  
  *  뒷자리는
  *  
  *  000000-1  23  45  6  7
  *  
  *  1    :  [성별구분]
  *  23  :  [등록기관번호]
  *  45  :  [일련번호]
  *  6    :  [등록자  구분]
  *  7    :  [검증번호]
  *  
  *  [성별구분]은
  *  1900년대  출생자인  경우  남자는  5,  여자는  6,
  *  2000년대  출생자인  경우  남자는  7,  여자는  8
  *  
  *  [등록기관번호]는  외국인등록기관(출입국관리사무소)의  고유번호
  *  
  *  [일련번호]는  등록당시  등록순서에  따라  순차적으로  부여
  *  
  *  [등록자  구분]은
  *  -  9  :  외국인(순수외국인)
  *  -  8  :  재외국민(이민을  간  우리나라사람중  국적이  한국인  사람)
  *  -  7  :  외국국적동포(이민가서  국적까지  취득한  사람)
  *  
  *  [검증번호]는  체계에  맞는지  확인하는  번호이다.
  *  제일  마지막자리는  검증번호
  *  
  *  @param  serial1  String  주민번호  앞  6자리
  *  @param  serial2  String  주민번호  뒤  7자리
  *  @return  boolean  유효한  주민번호인지  여부  true/false
  *  </pre>
  */
public  static  boolean  isResNoForeign(String  serial1,  String  serial2)  {
        String  birthYear  =  "";
        String  fgnno  =  serial1  +  serial2;

        //  전체자릿수  체크
        if  ((serial1  +  serial2).length()  !=  13)  {
                return  false;
        }

        //  주민번호  앞  6자리  체크
        if  ((fgnno.charAt(6)  ==  '5')  ||  (fgnno.charAt(6)  ==  '6'))  {
                birthYear  =  "19"  +  fgnno.substring(0,  6);
        }  else  if  ((fgnno.charAt(6)  ==  '7')  ||  (fgnno.charAt(6)  ==  '8'))  {
                birthYear  =  "20"  +  fgnno.substring(0,  6);
        }  else  if  ((fgnno.charAt(6)  ==  '9')  ||  (fgnno.charAt(6)  ==  '0'))  {
                birthYear  =  "18"  +  fgnno.substring(0,  6);
        }  else  {
                //  new  BizException("등록번호에  오류가  있습니다.  다시  확인하십시오.");
                return  false;
        }

        //  주민등록번호  앞  자리가  유효한  날짜인가  점검
        if  (isValidDate(birthYear)  ==  false)  {
                return  false;
        }

        //  주민번호  뒷자리  체크
        int  sum  =  0;
        int  odd  =  0;
        int[]  buf  =  new  int[13];

        for  (int  i  =  0;  i  <  13;  i++)  {
                buf[i]  =  Character.getNumericValue(fgnno.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;
        }

        int[]  multipliers  =  new  int[]  {  2,  3,  4,  5,  6,  7,  8,  9,  2,  3,  4,  5  };

        for  (int  i  =  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;
        }

        return  true;
}

10207 view

4.0 stars