자바 주민등록번호 에 따라 연령 을 계산 하고 15 명의 주민등록번호 가 18 비트 로 전환 하 는 원리 와 조작 예시

본 고의 실례 는 자바 가 주민등록번호 에 따라 나 이 를 계산 하고 15 명의 주민등록번호 가 18 명 으로 바 뀌 는 것 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1 세대 신분증:15 위 주민등록번호 의 의미
15 위 주민등록번호 여러분 의 의미:
1-2 위 성,자치구,직할시 코드;
3-4 위 지급 시,맹,자치주 코드;
5-6 위 현,현급 시,구 코드;
7-12 명의 생년월일,예 를 들 어 670401 은 1967 년 4 월 1 일 을 대표 하 는데 이것 은 18 명의 번호 와 첫 번 째 차이 점 이다.
13-15 위 는 순서 번호 이 고 그 중에서 15 명의 남 자 는 홀수 이 며 여 자 는 짝수 이다.
18 명의 신분증 번호 와 두 번 째 차이 점:마지막 검사 코드 가 없습니다.
예:
130503 670401 001 의 의미;13 은 하북,05 는 형 대,03 은 교 서구 이 고 생년월일 은 1967 년 4 월 1 일 이 며 순서 번 호 는 001 이다.
2 세대 신분증:18 위 주민등록번호 의 의미
① 앞의 1,2 자리 숫자 는 소재 성의 코드,하남성 의 성 코드 는 41 입 니 다!
② 3,4 위 숫자 는 도시 의 코드 를 나타 낸다.
③ 다섯 번 째,여섯 번 째 숫자 는 해당 지역 과 현의 코드 를 나타 낸다.
④ 7~14 위 는 출생 년,월,일 을 나타 낸다.
⑤ 15,16 위 숫자 는 소재지 의 파출소 코드 를 나타 낸다.
⑥ 17 위 숫자 는 성별 을 나타 낸다.기 수 는 남성 을 나타 내 고 우 수 는 여성 을 나타 낸다.
⑦ 18 번 째 숫자 는 학교 검사 코드 입 니 다.개인 정보 코드 라 고도 하 는데 보통 컴퓨터 에 따라 무 작위 로 만들어 져 신분증 의 정확성 을 검증 합 니 다.검사 코드 는 0~9 의 숫자 일 수도 있 고 x 로 표시 할 수도 있다.
예:
130503 19670401 0012 이 주민등록번호 의 의 미 는 13 은 하북,05 는 형 대,03 은 다리 서구 이 고 생년월일 은 1967 년 4 월 1 일 이 며 순서 번 호 는 001,2 는 검사 코드 이다.
주민등록번호(18 위)에 따라 생년월일 추출 및 연령 계산

package idcard;
import java.text.SimpleDateFormat;
import java.util.Date;
public class IdCardTest {
 //          
 public static int IdNOToAge(String IdNO){
  int leh = IdNO.length();
  String dates="";
  int age = 0;
  if (leh == 18) {
   dates = IdNO.substring(6, 10);
   SimpleDateFormat df = new SimpleDateFormat("yyyy");
   String year = df.format(new Date());
   age = Integer.parseInt(year)-Integer.parseInt(dates);
  }else {
   System.out.println("  !       18 !");
  }
  return age;
 }
 public static void main(String[] args) {
  System.out.println(IdNOToAge("120000197802150561"));
  System.out.println(IdNOToAge("32000019951110538X"));
 }
}

15 명의 주민등록번호 가 18 명의 주민등록번호 로 바 뀌 었 다.

package idcard;
import java.util.Scanner;
public class IDcard15bitTo18bit {
 public static String[] trans15bitTo18bit(String[] input){
  String[] result = new String[18];
  for(int i=0;i<input.length;i++){
   if(i<=5){
    result[i] = input[i];
   }else{
    result[i+2] = input[i];
   }
  }
  //        17,   20XX,   19XX
  if(Integer.valueOf(input[6])<=1&&Integer.valueOf(input[7])<=7){
   result[6]="2";
   result[7]="0";
  }else{
   result[6]="1";
   result[7]="9";
  }
  //      
  String[] xs = {"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"};
  //        [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
  int sum = 0;
  for(int i=0;i<17;i++){
   sum+= Integer.valueOf(result[i]) * Integer.valueOf(xs[i]);
  }
  // 11  ,    0 - 10
  int rod = sum % 11;
  //             
  if(rod==0){ result[17] = "1";
  }else if(rod==1){ result[17] = "0";
  }else if(rod==2){ result[17] = "X";
  }else if(rod==3){ result[17] = "9";
  }else if(rod==4){ result[17] = "8";
  }else if(rod==5){ result[17] = "7";
  }else if(rod==6){ result[17] = "6";
  }else if(rod==7){ result[17] = "5";
  }else if(rod==8){ result[17] = "4";
  }else if(rod==9){ result[17] = "3";
  }else if(rod==10){ result[17] = "2";}
  return result;
 }
 public static void main(String[] args) {
   //      
   Scanner sc=new Scanner(System.in);
   //          
   String str="";
   System.out.print("     15     :");
   str=sc.nextLine();
   System.out.println("    15      :"+str);
   if(str.length()==15){
    String[] input = str.split("");
    String[] result = trans15bitTo18bit(input);
    System.out.print("  18      :");
    for(String c:result){
     System.out.print(c);
    }
   }else{
    System.out.println("          !");
   }
 }
}

첨부:C\#버 전과 VB 버 전 15 비트 의 신분증 번호 가 18 비트 작업 예제 로 바 뀌 었 습 니 다.
C\#버 전

function ID15T18(strTemp)
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
var nTemp = 0, i;
if(strTemp.length==15)
{
strTemp = strTemp.substr(0,6) + '19' + strTemp.substr(6,strTemp.length-6);
for(i = 0; i < strTemp.length; i ++)
{
nTemp += strTemp.substr(i, 1) * arrInt[i];
}
strTemp += arrCh[nTemp % 11];
}
return strTemp;
}

VB 판

privatestringConvert15To18(stringstrTemp)
{
int[]arrInt=newint[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
stringarrCh="10X98765432";
intnTemp=0;
if(strTemp.Length==15)
{
strTemp=strTemp.Substring(0,6)+"19"+strTemp.Substring(6,strTemp.Length-6);
for(inti=0;i<strTemp.Length;i++)
{
nTemp+=int.Parse(strTemp.Substring(i,1).ToString())*arrInt[i];
}
strTemp+=arrCh[nTemp%11];
}
chardd=arrCh[nTemp%11];
returnstrTemp;
}

PS:여기 서 본 사이트 의 신분증 귀속 지 정보 조회 도 구 를 하나 더 제공 하여 여러분 께 참고 하 시기 바 랍 니 다.
신분증 귀속 지 정보 온라인 조회:
http://tools.jb51.net/bianmin/sfz
또한 본 사이트 의 온라인 도구 애플 릿 에 도 더욱 강력 한 신분증 정보 획득 도구 가 있 습 니 다.관심 이 있 는 친 구 는 다음 과 같은 애플 릿 코드 를 스 캔 하여 볼 수 있 습 니 다.

자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기