标签:
转自http://www.cnblogs.com/xiaoafei1991/p/4309328.html
我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit。
身份证号是有规则的。
// 身份证号验证 function isIdCard(cardid) { //身份证正则表达式(18位) 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; var stard = "10X98765432"; //最后一位身份证的号码 var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17系数 var sum = 0; if (!isIdCard2.test(cardid)) { return false; } var year = cardid.substr(6, 4); var month = cardid.substr(10, 2); var day = cardid.substr(12, 2); var birthday = cardid.substr(6, 8); if (birthday != dateToString(new Date(year + ‘/‘ + month + ‘/‘ + day))) { //校验日期是否合法 return false; } for (var i = 0; i < cardid.length - 1; i++) { sum += cardid[i] * first[i]; } var result = sum % 11; var last = stard[result]; //计算出来的最后一位身份证号码 if (cardid[cardid.length - 1].toUpperCase() == last) { return true; } else { return false; } } //日期转字符串 返回日期格式20080808 function dateToString(date) { if (date instanceof Date) { var year = date.getFullYear(); var month = date.getMonth() + 1; month = month < 10 ? ‘0‘ + month: month; var day = date.getDate(); day = day < 10 ? ‘0‘ + day: day; return year + month + day; } return ‘‘; }
这里只验证18位身份证,15位的一代身份证不能使用了。
这里还验证了日期的合法性,如0230,0431等非法日期,验证是不会通过的。
我们还可以将这个方法加到jquery validate中,方便验证使用。
写个自定义jquery validate校验方法
// 身份证号验证 jQuery.validator.addMethod("isIdCard", function(value, element) { return this.optional(element) || (isIdCard(value)); }, "身份证号非法!");
来个简的demo,看看效果如何。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 身份证号校验 </title> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"> </script> <script src="http://www.w3cschool.cc/try/demo_source/static/js/jquery.validate.js"> </script> <script type="text/javascript"> $(function () { $("#form1").validate({ rules: { txtIdCard: "isIdCard" } }); }); // 身份证号验证 function isIdCard(cardid) { //身份证正则表达式(18位) 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; var stard = "10X98765432"; //最后一位身份证的号码 var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17系数 var sum = 0; if (!isIdCard2.test(cardid)) { return false; } var year = cardid.substr(6, 4); var month = cardid.substr(10, 2); var day = cardid.substr(12, 2); var birthday = cardid.substr(6, 8); if (birthday != dateToString(new Date(year+‘/‘+month+‘/‘+day))) {//校验日期是否合法 return false; } for (var i = 0; i < cardid.length - 1; i++) { sum += cardid[i] * first[i]; } var result = sum % 11; var last = stard[result]; //计算出来的最后一位身份证号码 if (cardid[cardid.length - 1].toUpperCase() == last) { return true; } else { return false; } } //日期转字符串 返回日期格式20080808 function dateToString(date) { if (date instanceof Date) { var year = date.getFullYear(); var month = date.getMonth() + 1; month = month < 10 ? ‘0‘ + month : month; var day = date.getDate(); day = day < 10 ? ‘0‘ + day : day; return year + month + day; } return ‘‘; } // jquery validate身份证号验证 jQuery.validator.addMethod("isIdCard", function (value, element) { return this.optional(element) || (isIdCard(value)); }, "身份证号非法!"); </script> </head> <body> <form id="form1" method="get" action=""> <input type="text" id="txtIdCard" name="txtIdCard" /> <p> <input class="submit" type="submit" value="提交" /> </p> </form> </body> </html>
用百度百科上提供的那身份证号53010219200508011X验证下
校验不通过,我们写的验证方法成功了!不信你用自己的身份证号试试。原来用js校验身份证号so easy。
如果觉得对你有帮助,请点个赞,谢谢!
不足与错误之处,敬请批评指正!
标签:
原文地址:http://www.cnblogs.com/zhangdong-ah/p/4310327.html