>웹 프론트엔드 >JS 튜토리얼 >ID 번호_javascript 기술의 JavaScript 검증

ID 번호_javascript 기술의 JavaScript 검증

WBOY
WBOY원래의
2016-05-16 16:11:251179검색

우리는 인터넷 홈페이지를 구축할 때 개인정보를 등록할 때 ID번호를 사용하는 경우가 많습니다. 엿같은.

ID번호에는 규칙이 있습니다.

구조 및 형태

 1. 숫자 구조
주민등록번호는 17자리의 신체코드와 1자리의 검사코드로 구성된 특징적인 조합코드입니다. 왼쪽부터 순서대로 주소코드 6자리, 생년월일코드 8자리, 시퀀스코드 3자리, 체크코드 1자리입니다.
2. 주소 코드
코드 대상의 영구 거주지가 위치한 현(시, 배너, 구)의 행정 구역 코드를 표시하며 GB/T2260의 규정에 따라 시행됩니다.
3. 생년월일 코드
인코딩 대상의 생년월일을 나타냅니다. GB/T7408 규정에 따라 구현됩니다. 연도, 월, 일 코드 사이에 구분 기호가 없습니다.
4. 시퀀스 코드
동일한 주소코드로 식별되는 지역 내에서 동일한 연월일에 태어난 사람에게 부여된 일련번호를 나타냅니다. 일련번호 중 홀수는 남자에게, 짝수는 여자에게 부여됩니다.
5. 인증코드
이전 17자리 코드를 기반으로 확인 코드는 ISO 7064:1983.MOD 11-2 확인 코드에 따라 계산됩니다.
계산방법

1. ID 번호 앞 17자리에 다른 계수를 곱합니다. 첫 번째 위치부터 17번째 위치까지의 계수는 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2입니다.
2. 이 17자리 숫자와 계수를 곱한 결과를 더합니다.
3. 합산한 금액을 11로 나눕니다. 나머지는 얼마입니까?
4. 나머지는 11개의 숫자만 가능합니다: 0-1-2-3-4-5-6-7-8-9-10. 해당하는 마지막 ID 번호는 1-0-X-9-8-7-6-5-4-3-2입니다.
5. 위에서 보면 나머지가 3이면 신분증 18자리가 9로 나타나는 것을 알 수 있습니다. 해당 숫자가 2인 경우 신분증의 마지막 숫자는 로마숫자 x입니다.
예를 들어, 남성의 신분증 번호는 [53010219200508011x]입니다. 이 신분증이 합법적인 신분증인지 확인해 보겠습니다.
먼저 처음 17자리 숫자의 곱의 합을 구합니다. [(5*7) (3*9) (0*10) (1*5) (0*8) (2*4) (1*2) (9*1) (2*6) (0*3) (0*7) (5*9) (0*10) (8*5) (0*8) (1*4) (1*2) ]는 189이고, 189를 11로 나누면 189/11=17----2가 되므로 나머지는 2가 됩니다. 마지막으로 해당 규칙을 통해 나머지 2에 해당하는 체크코드가 X임을 알 수 있다. 따라서 이는 정확한 ID번호임을 확인할 수 있다.
위 내용은 바이두 백과사전에서 발췌한 것입니다.

인터넷에서 찾은 관련 정보 사진입니다.

알려진 정보에 따르면 이 메소드의 내부 구현을 js로 작성할 수 있습니다. 처음 17자리 인증은 비교적 구현하기 쉽기 때문에 자세한 내용은 생략하고 체크코드의 마지막 숫자에 집중하겠습니다.

코드 복사 코드는 다음과 같습니다.

// 주민등록번호 확인
함수 isIdCard(cardid) {
// ID 카드 정규식(18비트)
var isIdCard2 = /^[1-9]d{5}(19d{2}|[2-9]d{3})((0d)|(1[0-2]))(([0|1 |2]d)|3[0-1])(d{4}|d{3}X)$/i;
var stard = "10X98765432"; //마지막 ID번호
var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] //1-17 계수
var 합계 = 0;
If (!isIdCard2.test(cardid)) {
          false를 반환합니다.
}
var 연도 = Cardid.substr(6, 4);
var 월 = Cardid.substr(10, 2);
var day = Cardid.substr(12, 2);
var birthday = Cardid.substr(6, 8);
If (생일 != dateToString(new Date(year '/' 월 '/' 일))) { //날짜가 올바른지 확인
          false를 반환합니다.
}
for (var i = 0; i < cardid.length - 1; i ) {
         합계 = 카디드[i] * 첫 번째[i];
}
var 결과 = 합계 % 11;
var last = stard[result]; //계산된 마지막 ID 번호
If (cardid[cardid.length - 1].toUpperCase() == last) {
         true를 반환합니다.
} 그 밖의 {
          false를 반환합니다.
}
}
//날짜를 문자열로 변환하고 날짜 형식 20080808을 반환합니다
함수 dateToString(날짜) {
If (date 인스턴스of Date) {
        var year = date.getFullYear();
        var 월 = date.getMonth() 1;
월 = 월 < 10 ? '0' 월: 월;
        var day = date.getDate();
일 = 일 < 10 ? '0' 일: 일;
          연월일 반환;
}
'' 반환;
}

여기에서는 18자리 신분증만 인증되며, 15자리 1세대 신분증은 사용할 수 없습니다.

날짜의 합법성도 여기서 확인됩니다. 0230, 0431 등 잘못된 날짜의 경우 확인이 통과되지 않습니다.

또한 이 메서드를 jquery verify에 추가하여 확인을 용이하게 할 수도 있습니다.

사용자 정의 jquery 유효성 검사 방법 작성

코드 복사 코드는 다음과 같습니다.

// 주민등록번호 확인
jQuery.validator.addMethod("isIdCard",
함수(값, 요소) {
return this.ional(element) || (isIdCard(value));
},
"잘못된 ID 번호입니다!");

간단한 데모를 통해 어떻게 작동하는지 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.

 
 
    
        
        
             身份证号校验