(1) 18개의 ID번호 구조
주민등록번호는 17자리의 신체코드와 1자리의 검사코드로 구성된 특징적인 조합코드입니다.
왼쪽부터 순서대로 주소코드 6자리, 생년월일코드 8자리, 시퀀스코드 3자리, 체크코드 1자리입니다.
1. 주소코드
코드 대상의 영구 거주지가 위치한 현(시, 배너, 구)의 행정 구역 구분 코드를 나타내며 GB/T2260의 규정에 따라 시행합니다.
2. 생년월일
인코딩 대상의 생년월일을 나타냅니다. GB/T7408 규정에 따라 구현됩니다. 연도, 월, 일 코드 사이에 구분 기호가 없습니다.
3. 시퀀스 코드
동일한 주소코드로 식별되는 지역 내에서 동일한 연월일에 태어난 사람에게 일련번호가 부여됨을 나타냅니다. 남성은 일련번호가 홀수이고 여성은 짝수입니다. .
4. 코드 계산 단계 확인
(1) 17자리 온톨로지 코드의 가중합산식
S = Sum(Ai * Wi), i = 0, ... , 16, 먼저 처음 17자리의 가중치를 합산합니다.
Ai : i번째 위치(0~9)의 ID번호의 디지털 값을 나타냅니다.
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (i번째 위치의 가중치를 나타냄)
(2) 계산 모델
Y = mod(S, 11)
(3) 모듈에 따라 해당 검사 코드를 찾습니다.
예: 0 1 2 3 4 5 6 7 8 9 10
코드 확인: 1 0 X 9 8 7 6 5 4 3 2
(2) 17자리 온톨로지 코드를 기반으로 체크코드의 마지막 자리를 구하는 프로그램 예
다음과 같이 코드 코드를 복사합니다.
공개 클래스 ID18 {
int[] 가중치={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2} //17자리 온톨로지 코드 가중치
char[] 유효성 검사={ '1','0','X','9','8','7','6','5','4','3','2'} ; //mod11, 검사 코드 문자 값에 해당
공개 문자 getValidateCode(문자열 id17){
정수 합=0;
정수 모드=0;
for(int i=0;i<id17.length();i++){
sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
}
모드=합계%11;
return 유효성[모드];
}
공개 정적 무효 메인(문자열[] 인수){
Id18 테스트=새로운 Id18();
System.out.println("본 신분증의 인증코드:"+test.getValidateCode("14230219700101101")); //본 신분증의 인증코드: 3
}
}
(3) 설명
1. 프로그램은 기존 17자리 온톨로지 코드를 기반으로 해당 인증코드를 획득할 수 있습니다.
2. 이 프로그램은 잘못된 인증 코드로 ID 번호를 제거할 수 있습니다.
3. 신분증 15자리의 생년월일은 체크코드 끝 1자리를 제외한 연도 끝 2자리를 사용합니다.
4. 완전한 ID 카드는 18자리이며, 마지막 확인 숫자는 숫자가 아닐 수도 있습니다. 우리 프로젝트 중 하나에서 데이터베이스는 처음 17자리를 저장하여 일부 SQL 문(예: 내부 조인)의 속도를 높일 수 있습니다! ! !