古詩詞大全網 - 成語大全 - 帶表單的javascript驗證身份證號

帶表單的javascript驗證身份證號

其實就是加壹個JS函數段吧。下面這段JS腳本是我用過的最完善的身份證號的驗證程序了,因為只有真正的身份證號才能被通過,妳可以試的。直接復制運行。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

*/

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:"國外"

};

checktheform = function()

{

var card = document.getElementById('card_no').value;

//是否為空

if(card === '')

{

alert('請輸入身份證號,身份證號不能為空');

document.getElementById('card_no').focus;

return false;

}

//校驗長度,類型

if(isCardNo(card) === false)

{

alert('您輸入的身份證號碼不正確,請重新輸入');

document.getElementById('card_no').focus;

return false;

}

//檢查省份

if(checkProvince(card) === false)

{

alert('您輸入的身份證號碼不正確,請重新輸入');

document.getElementById('card_no').focus;

return false;

}

//校驗生日

if(checkBirthday(card) === false)

{

alert('您輸入的身份證號碼生日不正確,請重新輸入');

document.getElementById('card_no').focus();

return false;

}

//檢驗位的檢測

if(checkParity(card) === false)

{

alert('您的身份證校驗位不正確,請重新輸入');

document.getElementById('card_no').focus();

return false;

}

alert('OK');

return true;

};

//檢查號碼是否符合規範,包括長度,類型

isCardNo = function(card)

{

//身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後壹位是校驗位,可能為數字或字符X

var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;

if(reg.test(card) === false)

{

return false;

}

return true;

};

//取身份證前兩位,校驗省份

checkProvince = function(card)

{

var province = card.substr(0,2);

if(vcity[province] == undefined)

{

return false;

}

return true;

};

//檢查生日是否正確

checkBirthday = function(card)

{

var len = card.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 = card.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 = card.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 >= 3 && time <= 100)

{

return true;

}

return false;

}

return false;

};

//校驗位的檢測

checkParity = function(card)

{

//15位轉18位

card = changeFivteenToEighteen(card);

var len = card.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 += card.substr(i, 1) * arrInt[i];

}

valnum = arrCh[cardTemp % 11];

if (valnum == card.substr(17, 1))

{

return true;

}

return false;

}

return false;

};

//15位轉18位身份證號

changeFivteenToEighteen = function(card)

{

if(card.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;

card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);

for(i = 0; i < 17; i ++)

{

cardTemp += card.substr(i, 1) * arrInt[i];

}

card += arrCh[cardTemp % 11];

return card;

}

return card;

};

</script>

</head>

<body>

<form name="form1" method="post" action="">

<label>身份證號

<input name='card_no' type='text' id='card_no' onBlur='javascript:checktheform();'/>

</label>

<label>

<input type="submit" name="Submit" value="提交">

</label>

</form></body>

</html>