>  기사  >  웹 프론트엔드  >  신분증 정보의 유효성을 검증하는 js_javascript 기술

신분증 정보의 유효성을 검증하는 js_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:54:00931검색

다음은 인코딩 규칙에 따라 JS를 이용하여 신분증 번호를 검증하는 코드입니다.

IdCard-Validate.js 코드는 다음과 같습니다.

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

/**
* 신분증 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는 오른쪽에서 왼쪽으로 ID 카드 번호 2~18자리입니다. 풋 체크 코드가 위치한 체크 코드 배열의 위치
*
*/

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
return false; 🎜>} else {
return false;
}
}
/**
* ID번호가 18자리일 때 마지막 인증숫자가 맞는지 판단
* @param a_idCard ID 카드번호 배열
* @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 {
return false; }
}
/**
* 신분증으로 남자인지 여자인지 판단
* @param idCard ID 번호 15/18자리
* @return '여성'-여성, '남성'-남성
*/
function maleOrFemalByIdCard(idCard){
idCard = Trim(idCard.replace(/ /g, ""));// ID 처리 숫자. 문자 사이에 공백을 포함합니다.
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return '여성';
}else{
return '남성';
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return '여성 ';
}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{
// '남성' 반환
// }
// }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(일)) {
return false;
}else{
return true;
}
}
/**
* 신분증 번호 15자리에 생일이 유효한지 확인
* @param idCard15 신분증 15자리 문자열
* @return
*/
function isValidityBrithBy15IdCard(idCard15){
var year = idCard15.substring(6,8);
var Month = idCard15.substring(8,10);
var day = idCard15.substring(10,12)
var temp_date = new Date (year, parseFloat(month)-1,parseFloat(day));
// 기존 신분증의 나이에 대해서는 Y2K 문제를 고려할 필요가 없으며
(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, "")
}


업데이트된 버전 2

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

function checkIdcard( num)
{
num = num.toUpperCase();
//ID번호는 15자리 또는 18자리일 경우 18자리 중 앞 17자리입니다. 마지막 숫자는 체크섬 비트이며 숫자 또는 문자 X일 수 있습니다.
if (!(/(^d{15}$)|(^d{17}([0-9]|X)$)/.test(num)))
{
/ /alert('입력하신 ID번호의 길이가 틀렸거나, 규정에 맞지 않는 번호입니다! 15자리 숫자는 모두 숫자여야 하며, 18자리 숫자의 마지막 자리는 숫자 또는 X가 될 수 있습니다. ');
return false;
}
//검사 숫자는 ISO 7064:1983.MOD 11-2 규정에 따라 생성되며 X는 숫자 10으로 간주될 수 있습니다.
//다음은 생년월일과 검사 숫자를 각각 분석합니다.
var len, re
len = num.length
if (len == 15)
{
re; = new RegExp(/^(d{6})(d{2})(d{2})(d{2})(d{3})$/)
var arrSplit = num.match( re );

//생일 날짜가 맞는지 확인
var dtmBirth = new Date('19' arrSplit[2] '/' arrSplit[3] '/' arrSplit[4]);
var bGoodDay
bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && (dtmBirth .getDate( ) == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert('입력한 아이디의 생년월일이 틀렸습니다!');
return false
}
else
{
//15자리 ID 카드를 18자리로 변환
//검사 숫자는 ISO 7064에 따라 생성됩니다. 1983.MOD 11-2, X 숫자 10이라고 생각하세요.
var arrInt = 새로운 배열(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 nTemp = 0, i;
num = num.substr(0, 6) '19' num.substr(6, num.length - 6)
for(i = 0; i < 17 ; i )
{
nTemp = num.substr(i, 1) * arrInt[i];
num = arrCh[nTemp % 11]
>}
}
if (len == 18)
{
re = new RegExp(/^(d{6})(d{4})(d{2})(d {2})(d{3})([0-9]|X)$/);
var arrSplit = num.match(re);

//생일 날짜가 다음인지 확인하세요. 올바른
var dtmBirth = new Date(arrSplit[2] "/" arrSplit[3] "/" arrSplit[4])
var bGoodDay
bGoodDay = (dtmBirth.getFullYear() == 숫자 (arrSplit [2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
if ( !bGoodDay )
{
//alert(dtmBirth.getYear())
//alert(arrSplit[2])
//alert('입력한 ID의 생년월일) number is 틀림!');
return false;
}
else
{
//18자리 신분증의 체크코드가 맞는지 확인하세요.
//검사 숫자는 ISO 7064:1983.MOD 11-2에 따라 생성되며 X는 숫자 10으로 간주될 수 있습니다.
var valnum;
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 nTemp = 0, i;
for(i = 0; i {
nTemp = num.substr(i, 1) * arrInt[ i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
//alert('18 비트 ID 카드의 인증 코드가 잘못되었습니다. ' valnum);
return false
}
return true; >}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.