JavaScript 정규 표현 식 은 주민등록번호 가 합 법 적 인지 검증 합 니 다(두 가지 방법)
사용자 등록 페이지 에서 요구 하 는 것 이 비교적 엄격 하기 때문에 신분증 js 에 대해 합 법 적 인지 검증 해 야 한다.이 기능 을 통 해 이 시스템 소프트웨어 를 엄 격 히 하여 많은 선원 들 을 걸 러 내야 한다.이 를 실현 하 는 방법 에 대해 설명해 드 리 겠 습 니 다.
사용자 가 입력 한 신분증 이 합 법 적 인지 아 닌 지 를 정규 표현 식 으로 판단 하 는 경우 가 많 습 니 다.정규 표현 식 으로 판단 하기 전에 신분증 번호 의 구성 에 대해 얼마나 알 고 있 습 니까?다음은 주민등록번호 에 얼마나 많은 정보 가 포함 되 어 있 는 지 알려 드 리 겠 습 니 다.
1.번호 의 구조
공민 신분 번 호 는 특징 조합 코드 로 17 자리 디지털 본체 코드 와 한 개의 검사 코드 로 구성 된다.배열 순 서 는 왼쪽 에서 오른쪽으로 여섯 자리 숫자 주소 코드,여덟 자리 숫자 생년월일 코드,세 자리 숫자 순서 코드 와 한 자리 숫자 검사 코드 로 나 뉜 다.
2.주소 코드(앞 여섯 자리)
인 코딩 대상 이 상주 호적 이 있 는 현(시,기,구)의 행정구 역 코드 를 나타 내 고 gb/T2260 의 규정 에 따라 집행 한다.
3.생년월일 번호(7 위~14 위)
인 코딩 대상 이 태 어 난 해,월,일 을 나타 내 고 gb/T7408 의 규정 에 따라 집행 하 며 년,월,일 코드 간 에 구분자 가 필요 하지 않 습 니 다.
4.순서 코드(15 위 에서 17 위)
같은 주소 코드 에 표 시 된 지역 범위 내 에서 같은 해,같은 달,같은 날 에 태 어 난 사람 에 게 정 해진 순서 번 호 를 나타 내 고 순서 번호 의 기 수 는 남성 에 게 분배 되 며 짝수 는 여성 에 게 분배 된다.
5.검사 코드(18 자리)
끝자리 번호 인 체크 코드 는 번호 작성 단위 가 통 일 된 공식 에 따라 계산 한 것 으로 누군가의 끝자리 가 0-9 이면 X 가 나 오지 않 지만 끝자리 가 10 이면 X 로 대체 해 야 한다.10 으로 끝자리 가 되면 이 사람의 신분증 은 19 명 이 되 기 때문이다.X 는 로마 숫자의 10 으로 10 을 X 로 대체 하면 공민의 신분증 이 국가 표준 에 부합 하도록 보장 할 수 있다.
주민등록번호 구조 가 각 부분 을 구성 한 다 는 뜻 을 알 고 우 리 는 주제 에 들 어가 기 시작 했다.
1.전국 지역 의 대상 정의
"북경",12:"천진",13:"하북",14:"산 서",15:"내몽고",21:"랴오닝",21:"랴오닝",22:"길 림",23:"흑룡강",31:"상해",32:"강 소",33:"절강",34:"안 후 이",35:"안 후 이",35:"복 건",36:"복 건",36:"강서",37:"산동",41:"하남",42:"후 베 이",43:"후 베 이",43:"호 남",44:"광 둥",45:"광 시",46:"광 시",46:"하 이 난",50:"충 칭",51:"충 칭",51:"쓰 촨",52:",",53:"운남",54:"티베트",61:"산 시",62:"감숙성",63:"청해",64:"영하",65:"신장",71:"대만",81:"홍콩",82:"마카오",91:"외국"}
2.정규 표현 식 판단
function isCardID(sId){
var iSum=0 ;
var info="" ;
if(!/^\d{17}(\d|x)$/i.test(sId)) return " ";
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null) return " ";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/")) ;
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return " ";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
if(iSum%11!=1) return " ";
//aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?" ":" ");//
return true;
}
두 번 째 방법:
function scCard(){
var scType=document.getElementById("sc_card_type").value;
if(scType=="1"){
var scCard=document.getElementById("sc_card_num").value;
if(scCard.length!=0){
if(!checkCard(scCard)){
$("#errorTips").html(" ");
}else{
$("#errorTips").html("");
}
}
}
return false;
}
//function checkidno(obj) {
var vcity={ 11:" ",12:" ",13:" ",14:" ",15:" ",
21:" ",22:" ",23:" ",31:" ",32:" ",
33:" ",34:" ",35:" ",36:" ",37:" ",41:" ",
42:" ",43:" ",44:" ",45:" ",46:" ",50:" ",
51:" ",52:" ",53:" ",54:" ",61:" ",62:" ",
63:" ",64:" ",65:" ",71:" ",81:" ",82:" ",91:" "
};
checkCard = function(obj)
{
//var card = document.getElementById('card_no').value;
//
// if(card === '')
// {
// return false;
//}
// ,
if(isCardNo(obj) === false)
{
return false;
}
//
if(checkProvince(obj) === false)
{
return false;
}
//
if(checkBirthday(obj) === false)
{
return false;
}
//
if(checkParity(obj) === false)
{
return false;
}
return true;
};
// , ,
isCardNo = function(obj)
{
// 15 18 ,15 ,18 17 , , X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if(reg.test(obj) === false)
{
return false;
}
return true;
};
// ,
checkProvince = function(obj)
{
var province = obj.substr(0,2);
if(vcity[province] == undefined)
{
return false;
}
return true;
};
//
checkBirthday = function(obj)
{
var len = obj.length;
// 15 , (3 ) (3 ) (2 ) (2 ) (2 ) (3 ),
if(len == '15')
{
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = obj.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19'+year+'/'+month+'/'+day);
return verifyBirthday('19'+year,month,day,birthday);
}
// 18 , (3 ) (3 ) (4 ) (2 ) (2 ) (4 ), X
if(len == '18')
{
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arr_data = obj.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year+'/'+month+'/'+day);
return verifyBirthday(year,month,day,birthday);
}
return false;
};
//
verifyBirthday = function(year,month,day,birthday)
{
var now = new Date();
var now_year = now.getFullYear();
//
if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
{
// (3 100 )
var time = now_year - year;
if(time >= 0 && time <= 130)
{
return true;
}
return false;
}
return false;
};
//
checkParity = function(obj)
{
//15 18
obj = changeFivteenToEighteen(obj);
var len = obj.length;
if(len == '18')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for(i = 0; i < 17; i ++)
{
cardTemp += obj.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == obj.substr(17, 1))
{
return true;
}
return false;
}
return false;
};
//15 18
changeFivteenToEighteen = function(obj)
{
if(obj.length == '15')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6);
for(i = 0; i < 17; i ++)
{
cardTemp += obj.substr(i, 1) * arrInt[i];
}
obj += arrCh[cardTemp % 11];
return obj;
}
return obj;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.