JS 전후단 신분증 번호 인증 코드 분석 실현

앞말
실명제는 많은 사이트에서 반드시 필요한 기능이기 때문에 사용자는 자주 신분증 번호를 입력해야 하지만 우리는 공안국의 데이터베이스에 연결되어 신분증과 성명 주소가 일치하는지 검증할 수 없기 때문에 신분증 생성 규칙에 따라 신분증 형식의 검증을 할 수 있다. 다음은 2세대 신분증의 검증만 소개한다.
계산 공식
공민 신분번호는 특징 조합 코드로 17자리 디지털 본체 코드와 한 개의 검사 코드로 구성되어 있다.
배열 순서는 왼쪽에서 오른쪽으로 여섯 자리 숫자 주소 코드, 여덟 자리 숫자 출생 날짜 코드, 세 자리 숫자 순서 코드와 한 개의 검사 코드입니다.
1. 주소 코드: 인코딩 대상이 상주하는 현(시, 기, 구)의 행정구역 구분 코드를 나타내고 GB/T2260의 규정에 따라 집행한다.
2. 출생 날짜 코드: 인코딩 대상이 태어난 년, 월, 일을 나타내고 GB/T7408의 규정에 따라 집행되며 년, 월, 일 코드 사이에는 구분자가 없다.
3. 순서 코드: 같은 주소 코드에 표시된 구역 범위 내에서 같은 해, 같은 달, 같은 날에 태어난 사람에게 정해진 순서 번호, 순서 코드의 홀수는 남성에게 분배되고 짝수는 여성에게 분배된다.
4. 검증 코드 계산 단계:
(1) 17자리 숫자 본체 코드 가중치 및 공식:
S=Sum(Ai*Wi), i=0,..., 16, 먼저 17자리 숫자에 대한 권구화;
Ai: i위치의 주민등록번호 숫자값(0~9)을 표시합니다.
Wi:79 10 5 8 42 1 6 3 7 9 10 5 8 42 (제 i 위치의 가중 인자 표시)
(2) 계산 모드: Y =mod(S, 11);
(3) 모델에 따라 대응하는 검사 코드를 찾습니다: Y:0 1 2 3 4 5 6 7 9 10 검사 코드: 1 0 X 9 8 7 6 5 4 32;
프런트엔드 검증

const weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];// 
const validate = ['1','0','X','9','8','7','6','5','4','3','2'];//mod11, 

function getValidateCode(id17){
 let sum = 0;
 let mode = 0;
 [...id17].forEach((elem,i) => {
  sum=sum+parseInt(elem)*weight[i];
 });
 mode = sum % 11;
 return validate[mode];
}
console.log(" :"+ getValidateCode("14230219700101101"));// :3
백엔드 인증(Java)

public class Id18 {
 int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};// 
 char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'};//mod11,   
 
 public char getValidateCode(String id17){
   int sum = 0;
   int mode = 0;
   for(int i = 0; i < id17.length(); i++){
     sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
   }
   mode = sum % 11;
   return validate[mode];
 }
 
 public static void main(String[] args){
   Id18 tes t= new Id18();
   System.out.println(" :"+test.getValidateCode("14230219700101101"));// :3
 }
}
총결산
신분증 검증과 핸드폰 번호 메일박스 등 형식 검증은 똑같다. 모두 전후단 이중 검증을 해야 한다. 전단 검증이 통과하지 않으면 후단 검증을 귀찮게 하지 않고 서버의 압력을 줄여야 한다.
한 세대 신분증의 검증에 대해 여러분도 관련 알고리즘을 조회할 수 있습니다. 원래의 기초 위에서 고치면 됩니다. 저는 지금도 한 세대 신분증이 없는 것 같습니다. 아니면 한 세대 신분증을 사용하는 사람들이 인터넷을 잘 하지 않기 때문에 여기에 쓰지 않습니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기