다음은 ID 번호 인코딩 규칙에 따라 JS를 사용한 유효성 검증 코드입니다.
Idcard-Validate.js 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사하십시오.
/**
* ID 카드의 15 비트 인코딩 규칙 : DDDDDD YYMMDD XX P
* DDDDDD : 지역 코드
* yymmdd : 생년월일
* xx : 순차적 클래스 인코딩은 결정할 수 없습니다
* P : 성별, 홀수 숫자는 남성이며 숫자는 여성입니다.
* <p />
* ID 카드의 18 비트 인코딩 규칙 : DDDDDD YYYYMMDD XXX Y
* DDDDDD : 지역 코드
* yyyymmdd : 생년월일
* xxx : 서열 유형 인코딩, 결정할 수없고, 홀수는 수컷이고, 숫자도 여성입니다.
* Y : 코드 확인,이 숫자의 값은 처음 17 자리를 통해 얻을 수 있습니다.
* <p />
* 18 자리 수의 가중치 계수는 (오른쪽에서 왼쪽에서 왼쪽으로) WI = [7, 9, 10, 5, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* 검증 비트 Y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* 체크 비트 계산 공식 : y_p = mod (∑ (ai × wi), 11)
* i는 오른쪽에서 왼쪽으로 ID 번호의 2 숫자입니다.
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 가중치 계수
var valideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // ID 카드 확인 비트 값은 x를 나타냅니다.
함수 idcardValidate (idcard) {
idcard = trim (idcard.replace ( / / g, "");
if (idcard.length == 15) {
반환 ISVALIDITYBRITHBY15IDCARD (IDCARD);
} else if (idcard.length == 18) {
var a_idcard = idcard.split ( ""); // ID 카드 배열을 가져옵니다
if (isvaliditybrithby18idcard (idcard) && istruevalidatecodeby18idcard (a_idcard)) {
진실을 반환하십시오.
} 또 다른 {
거짓을 반환합니다.
}
} 또 다른 {
거짓을 반환합니다.
}
}
/**
* ID 번호가 18 자리 일 때 마지막 확인 비트가 올바른지 확인
* @param a_idcard ID 번호 배열
* @반품
*/
함수 istruevalidatecodeby18idcard (a_idcard) {
var sum = 0; // 가중 합계 변수를 선언합니다
if (a_idcard [17] .tolowercase () == 'x') {
A_IDCARD [17] = 10; // 후속 작업의 경우 검증 코드를 마지막 비트 X로 10으로 바꾸십시오.
}
for (var i = 0; i <17; i ++) {
sum += wi [i] * a_idcard [i]; // 가중 합계
}
valcodeposition = sum % 11; // 확인 코드를 가져올 위치
if (a_idcard [17] == validecode [valcodeposition]) {
진실을 반환하십시오.
} 또 다른 {
거짓을 반환합니다.
}
}
/**
*ID 카드를 통해 남자인지 여자인지 판단
* @param idcard 15/18 자리 ID 번호
* @return 'Female'Female'-Male
*/
함수 maleorfemalbyidcard (idcard) {
idcard = trim (idcard.replace (// g, ""); // ID 번호를 처리합니다. 캐릭터 사이의 공간을 포함합니다.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
'여성'반품;
}또 다른{
'남성'을 반환합니다.
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
'여성'반품;
}또 다른{
'남성'을 반환합니다.
}
}또 다른{
널 리턴;
}
// 들어오는 문자는 배열로 직접 처리 할 수 있습니다.
// if (idcard.length == 15) {
// 경고 (Idcard [13]);
// if (idcard [13]%2 == 0) {
// '여성'반환;
// }또 다른{
// 반환 '남성';
//}
//} else if (idcard.length == 18) {
// Alert (Idcard [16]);
// if (idcard [16]%2 == 0) {
// '여성'반환;
// }또 다른{
// 반환 '남성';
//}
// }또 다른{
// null을 반환합니다.
//}
}
/**
* 18 자리 ID 번호의 생일이 유효한 생일인지 확인
* @param idcard 18 비트 북 ID 문자열
* @반품
*/
함수 ISVALIDITYBRITHBY18IDCARD (idcard18) {
var year = idcard18.substring (6,10);
var month = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = 새 날짜 (연도, parsefloat (월) -1, parsefloat (day));
// 여기에서 getlylyear ()를 사용하여 밀레니엄 버그의 문제를 피하기 위해 연도를 얻으십시오.
if (temp_date.getlyear ()! = parsefloat (년)
|| temp_date.getmonth ()! = parsefloat (Month) -1
|| temp_date.getDate ()! = parsefloat (day)) {
거짓을 반환합니다.
}또 다른{
진실을 반환하십시오.
}
}
/**
* 15 자리 ID 번호의 생일이 유효한 생일인지 확인
* @param idcard15 15 비트 북 ID 문자열
* @반품
*/
함수 ISVALIDITYBRITHBY15IDCARD (idcard15) {
var year = idcard15.substring (6,8);
var month = idcard15.substring (8,10);
var day = idcard15.substring (10,12);
var temp_date = 새 날짜 (연도, parsefloat (월) -1, parsefloat (day));
// 이전 ID 카드의 나이에 대해서는 천년 벌레 문제를 고려하고 getyear () 방법을 사용할 필요가 없습니다.
if (temp_date.getyear ()! = parsefloat (년)
|| temp_date.getmonth ()! = parsefloat (Month) -1
|| temp_date.getDate ()! = parsefloat (day)) {
거짓을 반환합니다.
}또 다른{
진실을 반환하십시오.
}
}
// 문자열 헤드와 테일 공간을 제거합니다
기능 트림 (str) {
return str.replace (/(^/s*) | (/s*$)/g, "");
}
위의 코드의 경우 실제로 성별을 사용하면 먼저 ID 카드가 유효한지 확인할 수 있습니다. 이러한 종류의 판단은이 코드 예제에서 이루어지지 않으며, 실제 사용 상황에 따라 약간 쓸모없고 완전히 풍성해질 수 있습니다.