我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit。
身份证号是有规则的。
1 // 身份证号验证 2 function isIdCard(cardid) { 3 //身份证正则表达式(18位) 4 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; 5 var stard = "10X98765432"; //最后一位身份证的号码 6 var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17系数 7 var sum = 0; 8 if (!isIdCard2.test(cardid)) { 9 return false;10 }11 var year = cardid.substr(6, 4);12 var month = cardid.substr(10, 2);13 var day = cardid.substr(12, 2);14 var birthday = cardid.substr(6, 8);15 if (birthday != dateToString(new Date(year + '/' + month + '/' + day))) { //校验日期是否合法16 return false;17 }18 for (var i = 0; i < cardid.length - 1; i++) {19 sum += cardid[i] * first[i];20 }21 var result = sum % 11;22 var last = stard[result]; //计算出来的最后一位身份证号码23 if (cardid[cardid.length - 1].toUpperCase() == last) {24 return true;25 } else {26 return false;27 }28 }29 30 //日期转字符串 返回日期格式2008080831 function dateToString(date) {32 if (date instanceof Date) {33 var year = date.getFullYear();34 var month = date.getMonth() + 1;35 month = month < 10 ? '0' + month: month;36 var day = date.getDate();37 day = day < 10 ? '0' + day: day;38 return year + month + day;39 }40 return '';41 }
这里只验证18位身份证,15位的一代身份证不能使用了。
这里还验证了日期的合法性,如0230,0431等非法日期,验证是不会通过的。
我们还可以将这个方法加到jquery validate中,方便验证使用。
写个自定义jquery validate校验方法
// 身份证号验证 jQuery.validator.addMethod("isIdCard",function(value, element) { return this.optional(element) || (isIdCard(value));},"身份证号非法!");
来个简的demo,看看效果如何。
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 //日期转字符串 返回日期格式2008080851 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>View Code
用百度百科上提供的那身份证号53010219200508011X验证下
验证能通过,把x换成0试试
校验不通过,我们写的验证方法成功了!不信你用自己的身份证号试试。原来用js校验身份证号so easy。
如果觉得对你有帮助,请点个赞,谢谢!
不足与错误之处,敬请批评指正!
新闻热点
疑难解答