Home  >  Article  >  Web Front-end  >  A simple example of js implementing ID number verification_javascript skills

A simple example of js implementing ID number verification_javascript skills

WBOY
WBOYOriginal
2016-05-16 16:59:331084browse

The following is the validity verification code using JS according to the ID card number encoding rules

IdCard-Validate.js code is as follows:

Copy code Code is as follows:

/**
 * 身份证15位编码规则:dddddd yymmdd xx p
 * dddddd:地区码
 * yymmdd: 出生年月日
 * xx: 顺序类编码,无法确定
 * p: 性别,奇数为男,偶数为女
 *


 * 身份证18位编码规则:dddddd yyyymmdd xxx y
 * dddddd:地区码
 * yyyymmdd: 出生年月日
 * xxx:顺序类编码,无法确定,奇数为男,偶数为女
 * y: 校验码,该位数值可通过前17位计算获得
 *


 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 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为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
 *
 */

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 ]; // 신분증 확인 비트 값 10은 X
function IdCardValidate(idCard) {
idCard = Trim(idCard.replace(/ /g, ""));
if (idCard.length == 15) {
return isValidityBrithBy15IdCard(idCard);
} else if (idCard.length == 18) {
var a_idCard = idCard.split("");// ID 카드 배열 가져오기
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
return true;
} else {
false 반환;
}
} else {
false 반환;
}
}
/**
* 신분증번호가 18자리일 때 마지막 인증숫자가 맞는지 판단
* @param a_idCard 신분증번호 배열
* @return
*/
function 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]) {
return true;
} else {
false 반환;
}
}
/**
* 신분증으로 남자인지 여자인지 판별
* @param idCard 15/18자리 ID번호
* @return '여성'-여성, '남성'-남성
*/
function maleOrFemalByIdCard(idCard){
idCard = Trim(idCard.replace (/ /g, ""));// ID 번호를 처리합니다. 문자 사이에 공백을 포함합니다.
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return 'female';
}else{
return 'male';
}
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return 'female ';
}else{
return 'male';
}
}else{
return null;
}
//들어오는 문자는 남성으로 직접 처리될 수 있습니다. 배열 처리
// if(idCard.length==15){
// Alert(idCard[13]);
// if(idCard[13]%2==0){
// '여성' 반환;
// }else{
// '남성' 반환;
// }
// }else if(idCard.length==18){
// Alert(idCard[16]);
// if(idCard[16]%2==0){
// return 'female';
// }else{
// return 'male';
// }
// }else{
// return null;
// }
}
/**
* 주민등록번호 18자리에 생일이 유효한지 확인
* @param idCard 주민등록번호 18자리 문자열
* @return
* /
function isValidityBrithBy18IdCard(idCard18){
var year = idCard18.substring(6,10);
var Month = idCard18.substring(10,12);
var day = idCard18.substring ( 12,14);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
// 여기서 getFullYear()를 사용하여 Y2K 문제를 피하기 위해 연도를 가져옵니다.
if (temp_date.getFullYear()!=parseFloat(년)
||temp_date.getMonth()!=parseFloat(월)-1
||temp_date.getDate()!=parseFloat(일)) {
false 반환;
}else{
true 반환;
}
}
/**
* 주민등록번호 15자리에 생일이 유효한 생일인지 확인
* @param idCard15 주민등록번호 15자리 문자열
* @return
*/
함수 isValidityBrithBy15IdCard(idCard15){
var year = idCard15.substring(6,8);
var Month = idCard15.substring(8,10);
var day = idCard15.substring(10,12);
var temp_date = 새 날짜 (year, parseFloat(month)-1,parseFloat(day));
// 기존 신분증의 나이에 대해서는 Y2K 문제를 고려할 필요가 없으며 getYear() 메서드를 사용할 필요가 없습니다
if (temp_date.getYear()! =parseFloat(연도)
||temp_date.getMonth()!=parseFloat(월)-1
||temp_date.getDate()!=parseFloat(일)){
return false;
}else{
return true;
}
}
//문자열에서 앞뒤 공백 제거
function Trim(str) {
return str.replace(/(^/s *)|(/s*$)/g, "");
}


위 코드의 경우 실제 사용에서의 성별 판단에 관해 , ID 카드가 효율적인지 판단하기 위해 먼저 추가할 수 있습니다. 이 코드 예제에서는 이런 판단이 이루어지지 않아 실제 사용 시 실제 상황에 따라 좀 더 풍부해질 수 있습니다.
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn