checktheform(cardid)調用返回布爾類型結果。
- //TODO
- 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(cardid)
{
- //var card = document.getElementById(cardid).value;
- var card = cardid;
- //是否爲空
- if (card
===
'')
{
- //alert('請輸入身份證號,身份證號不能爲空');
- //document.getElementById(cardid).focus;
- return
false;
- }
- //校驗長度,類型
- if (isCardNo(card)
===
false)
{
- //alert('您輸入的身份證號碼不正確,請重新輸入');
- //document.getElementById(cardid).focus;
- return
false;
- }
- //檢查省份
- if (checkProvince(card)
===
false)
{
- //alert('您輸入的身份證號碼不正確,請重新輸入');
- //document.getElementById(cardid).focus;
- return
false;
- }
- //校驗生日
- if (checkBirthday(card)
===
false)
{
- //alert('您輸入的身份證號碼生日不正確,請重新輸入');
- //document.getElementById(cardid).focus();
- return
false;
- }
- //檢驗位的檢測
- if (checkParity(card)
===
false)
{
- //alert('您的身份證校驗位不正確,請重新輸入');
- //document.getElementById(cardid).focus();
- return
false;
- }
- 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;
- };