자바 주민등록번호 에 따라 연령 을 계산 하고 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
또한 본 사이트 의 온라인 도구 애플 릿 에 도 더욱 강력 한 신분증 정보 획득 도구 가 있 습 니 다.관심 이 있 는 친 구 는 다음 과 같은 애플 릿 코드 를 스 캔 하여 볼 수 있 습 니 다.
자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.