1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>
6 身份证号校验
7 </title>
8 <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js">
9 </script>
10 <script src="http://www.w3cschool.cc/try/demo_source/static/js/jquery.validate.js">
11 </script>
12 <script type="text/javascript">
13 $(function () {
14 $("#form1").validate({
15 rules: {
16 txtIdCard: "isIdCard"
17 }
18 });
19 });
20
21 // 身份证号验证
22 function isIdCard(cardid) {
23 //身份证正则表达式(18位)
24 var isIdCard2 = /^[1-9]\d{5}(19\d{2}|[2-9]\d{3})((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])(\d{4}|\d{3}X)$/i;
25 var stard = "10X98765432"; //最后一位身份证的号码
26 var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17系数
27 var sum = 0;
28 if (!isIdCard2.test(cardid)) {
29 return false;
30 }
31 var year = cardid.substr(6, 4);
32 var month = cardid.substr(10, 2);
33 var day = cardid.substr(12, 2);
34 var birthday = cardid.substr(6, 8);
35 if (birthday != dateToString(new Date(year+'/'+month+'/'+day))) {//校验日期是否合法
36 return false;
37 }
38 for (var i = 0; i < cardid.length - 1; i++) {
39 sum += cardid[i] * first[i];
40 }
41 var result = sum % 11;
42 var last = stard[result]; //计算出来的最后一位身份证号码
43 if (cardid[cardid.length - 1].toUpperCase() == last) {
44 return true;
45 } else {
46 return false;
47 }
48 }
49
50 //日期转字符串 返回日期格式20080808
51 function dateToString(date) {
52 if (date instanceof Date) {
53 var year = date.getFullYear();
54 var month = date.getMonth() + 1;
55 month = month < 10 ? '0' + month : month;
56 var day = date.getDate();
57 day = day < 10 ? '0' + day : day;
58 return year + month + day;
59 }
60 return '';
61 }
62
63 // jquery validate身份证号验证
64 jQuery.validator.addMethod("isIdCard",
65 function (value, element) {
66 return this.optional(element) || (isIdCard(value));
67 },
68 "身份证号非法!");
69 </script>
70 </head>
71
72 <body>
73 <form id="form1" method="get" action="">
74 <input type="text" id="txtIdCard" name="txtIdCard" />
75 <p>
76 <input class="submit" type="submit" value="提交" />
77 </p>
78 </form>
79 </body>
80
81 </html>