1 function checkCardId(socialNo){
2
3 if(socialNo == "")
4 {
5 alert("输入身份证号码不能为空!");
6 return (false);
7 }
8
9 if (socialNo.length != 15 && socialNo.length != 18)
10 {
11 alert("输入身份证号码格式不正确!");
12 return (false);
13 }
14
15 var area={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:"国外"};
16
17 if(area[parseInt(socialNo.substr(0,2))]==null) {
18 alert("身份证号码不正确(地区非法)!");
19 return (false);
20 }
21
22 if (socialNo.length == 15)
23 {
24 pattern= /^\d{15}$/;
25 if (pattern.exec(socialNo)==null){
26 alert("15位身份证号码必须为数字!");
27 return (false);
28 }
29 var birth = parseInt("19" + socialNo.substr(6,2));
30 var month = socialNo.substr(8,2);
31 var day = parseInt(socialNo.substr(10,2));
32 switch(month) {
33 case '01':
34 case '03':
35 case '05':
36 case '07':
37 case '08':
38 case '10':
39 case '12':
40 if(day>31) {
41 alert('输入身份证号码不格式正确!');
42 return false;
43 }
44 break;
45 case '04':
46 case '06':
47 case '09':
48 case '11':
49 if(day>30) {
50 alert('输入身份证号码不格式正确!');
51 return false;
52 }
53 break;
54 case '02':
55 if((birth % 4 == 0 && birth % 100 != 0) || birth % 400 == 0) {
56 if(day>29) {
57 alert('输入身份证号码不格式正确!');
58 return false;
59 }
60 } else {
61 if(day>28) {
62 alert('输入身份证号码不格式正确!');
63 return false;
64 }
65 }
66 break;
67 default:
68 alert('输入身份证号码不格式正确!');
69 return false;
70 }
71 var nowYear = new Date().getYear();
72 if(nowYear - parseInt(birth)<15 || nowYear - parseInt(birth)>100) {
73 alert('输入身份证号码不格式正确!');
74 return false;
75 }
76 return (true);
77 }
78
79 var Wi = new Array(
80 7,9,10,5,8,4,2,1,6,
81 3,7,9,10,5,8,4,2,1
82 );
83 var lSum = 0;
84 var nNum = 0;
85 var nCheckSum = 0;
86
87 for (i = 0; i < 17; ++i)
88 {
89
90
91 if ( socialNo.charAt(i) < '0' || socialNo.charAt(i) > '9' )
92 {
93 alert("输入身份证号码格式不正确!");
94 return (false);
95 }
96 else
97 {
98 nNum = socialNo.charAt(i) - '0';
99 }
100 lSum += nNum * Wi[i];
101 }
102
103
104 if( socialNo.charAt(17) == 'X' || socialNo.charAt(17) == 'x')
105 {
106 lSum += 10*Wi[17];
107 }
108 else if ( socialNo.charAt(17) < '0' || socialNo.charAt(17) > '9' )
109 {
110 alert("输入身份证号码格式不正确!");
111 return (false);
112 }
113 else
114 {
115 lSum += ( socialNo.charAt(17) - '0' ) * Wi[17];
116 }
117
118
119
120 if ( (lSum % 11) == 1 )
121 {
122 return true;
123 }
124 else
125 {
126 alert("输入身份证号码格式不正确!");
127 return (false);
128 }
129
130 }