首页 > 语言 > JavaScript > 正文

jquery插件validation实现验证身份证号等

2024-05-06 16:21:23
字体:
来源:转载
供稿:网友

这篇文章主要介绍了jquery插件validation实现验证身份证号、护照、电话号码、email十分的简单实用,有需要的小伙伴可以参考下。

先推荐一个基于bootstrap的jQuery validation插件:http://thrilleratplay.github.io/jquery-validation-bootstrap-tooltip/

jQuery validation添加验证规则

validata.html

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  5. <!-- TemplateBeginEditable name="doctitle" --> 
  6. <title>无标题文档</title> 
  7. <script src="lib/jquery.js" type="text/javascript"></script> 
  8. <script src="lib/jquery.validate.js" type="text/javascript"></script> 
  9. <script src="lib/card.js" type="text/javascript"></script> 
  10. <script src="lib/validata.js" type="text/javascript"></script> 
  11. <style type="text/css"
  12. em.success{ 
  13. background:url("images/tips_arrow.gif") no-repeat left 0px; 
  14. padding-left:16px; 
  15. margin-left:2px; 
  16. em.error{ 
  17. background:url("images/tips_arrow.gif") no-repeat left -51px; 
  18. display:inline; 
  19. padding-left:10px; 
  20. font-style:normal; 
  21. font-size:11px; 
  22. margin-left:2px; 
  23. font-family:12px/162% Arial, Helvetica, sans-serif; 
  24.  
  25. </style> 
  26.  
  27. </head> 
  28.  
  29. <body> 
  30. <form class="cmsform" id="commentForm" method="get" action=""
  31. <p> 
  32. <label for="cusername">姓名</label><em>*</em> 
  33. <input id="cusername" name="username" size="25" /> 
  34.  
  35. </p> 
  36. <p> 
  37. <label for="cemail">电子邮件</label><em>*</em> 
  38. <input id="cemail" name="email" size="25" /> 
  39.  
  40. </p> 
  41. <p> 
  42. <label for="card">身份证号</label><em>*</em> 
  43. <input id="card" name="card" size="25"/> 
  44.  
  45. </p> 
  46. <p> 
  47. <label for="passport">护照编号</label><em>*</em> 
  48. <input id="passport" name="passport" size="25"/> 
  49.  
  50. </p> 
  51. <p> 
  52. <label for="phone">电话号码</label><em>*</em> 
  53. <input id="phone" name="phone" size="25" /> 
  54.  
  55. </p> 
  56. </form> 
  57. </body> 
  58. </html> 

validata.js

 

 
  1. $(function(){ 
  2.  
  3. $.validator.setDefaults({ 
  4. submitHandler: function(form) { 
  5. form.submit(); 
  6. }); 
  7. // 字符验证 
  8. jQuery.validator.addMethod("stringCheck"function(value, element) { 
  9. return this.optional(element) || /^[/u0391-/uFFE5/w]+$/.test(value); 
  10. }, "只能包括中文字、英文字母、数字和下划线"); 
  11. // 中文字两个字节 
  12. jQuery.validator.addMethod("byteRangeLength"function(value, element, param) { 
  13. var length = value.length; 
  14. for(var i = 0; i < value.length; i++){ 
  15. if(value.charCodeAt(i) > 127){ 
  16. length++; 
  17. return this.optional(element) || ( length >= param[0] && length <= param[1] ); 
  18. }, "请确保输入的值在3-15个字节之间(一个中文字算2个字节)"); 
  19.  
  20. // 身份证号码验证 
  21. jQuery.validator.addMethod("isIdCardNo"function(value, element) { 
  22. return this.optional(element) || idCardNoUtil.checkIdCardNo(value); 
  23. }, "请正确输入您的身份证号码"); 
  24. //护照编号验证 
  25. jQuery.validator.addMethod("passport"function(value, element) { 
  26. return this.optional(element) || checknumber(value); 
  27. }, "请正确输入您的护照编号"); 
  28.  
  29. // 手机号码验证 
  30. jQuery.validator.addMethod("isMobile"function(value, element) { 
  31. var length = value.length; 
  32. var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+/d{8})$/; 
  33. return this.optional(element) || (length == 11 && mobile.test(value)); 
  34. }, "请正确填写您的手机号码"); 
  35.  
  36. // 电话号码验证 
  37. jQuery.validator.addMethod("isTel"function(value, element) { 
  38. var tel = /^/d{3,4}-?/d{7,9}$/; //电话号码格式010-12345678 
  39. return this.optional(element) || (tel.test(value)); 
  40. }, "请正确填写您的电话号码"); 
  41.  
  42. // 联系电话(手机/电话皆可)验证 
  43. jQuery.validator.addMethod("isPhone"function(value,element) { 
  44. var length = value.length; 
  45. var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+/d{8})$/; 
  46. var tel = /^/d{3,4}-?/d{7,9}$/; 
  47. return this.optional(element) || (tel.test(value) || mobile.test(value)); 
  48.  
  49. }, "请正确填写您的联系电话"); 
  50.  
  51. // 邮政编码验证 
  52. jQuery.validator.addMethod("isZipCode"function(value, element) { 
  53. var tel = /^[0-9]{6}$/; 
  54. return this.optional(element) || (tel.test(value)); 
  55. }, "请正确填写您的邮政编码"); 
  56.  
  57. //开始验证 
  58. $('#commentForm').validate({ 
  59.  
  60. rules: { 
  61. username: { 
  62. required:true
  63. stringCheck:true
  64. byteRangeLength:[3,15] 
  65. }, 
  66. email:{ 
  67. required:true
  68. email:true 
  69. }, 
  70. phone:{ 
  71. required:true
  72. isMobile:true 
  73. }, 
  74. address:{ 
  75. required:true
  76. stringCheck:true
  77. byteRangeLength:[3,100] 
  78. }, 
  79. card:{ 
  80. required:true
  81. isIdCardNo:true 
  82.  
  83. }, 
  84. passport:{ 
  85. required:true
  86. passport:true 
  87.  
  88. }, 
  89.  
  90.  
  91. messages:{ 
  92. username: { 
  93. required: "请填写用户名"
  94. stringCheck: "用户名只能包括中文字、英文字母、数字和下划线"
  95. byteRangeLength: "用户名必须在3-15个字符之间(一个中文字算2个字符)" 
  96. }, 
  97. email:{ 
  98. required: "<font color=red>请输入一个Email地址</fond>"
  99. email: "请输入一个有效的Email地址" 
  100. }, 
  101. phone:{ 
  102. required: "请输入您的联系电话"
  103. isPhone: "请输入一个有效的联系电话" 
  104. }, 
  105. address:{ 
  106. required: "请输入您的联系地址"
  107. stringCheck: "请正确输入您的联系地址"
  108. byteRangeLength: "请详实您的联系地址以便于我们联系您" 
  109. }, 
  110. card:{ 
  111. required:"请输入身份证号"
  112. isIdCardNo:"请输入正确的身份证号" 
  113. }, 
  114. passport:{ 
  115. required:"请输入护照编号"
  116. passport:"请输入正确的护照编号" 
  117. }, 
  118.  
  119. focusInvalid: false
  120. onkeyup: false
  121. errorPlacement: function(error, element) { 
  122. error.appendTo( element.parent()); 
  123. }, 
  124. errorElement:"em"
  125. error:function(label){label.text(" ").addClass("error");} 
  126. }); 
  127. }) 

card.js

 

 
  1. var idCardNoUtil = { 
  2.  
  3. provinceAndCitys: {11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江"
  4. 31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东"
  5. 45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏"
  6. 65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}, 
  7. powers: ["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"], 
  8. parityBit: ["1","0","X","9","8","7","6","5","4","3","2"], 
  9. genders: {male:"男",female:"女"}, 
  10. checkAddressCode: function(addressCode){ 
  11. var check = /^[1-9]/d{5}$/.test(addressCode); 
  12. if(!check) return false
  13. if(idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0,2))]){ 
  14. return true
  15. }else
  16. return false
  17. }, 
  18. checkBirthDayCode: function(birDayCode){ 
  19. var check = /^[1-9]/d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode); 
  20. if(!check) return false
  21. var yyyy = parseInt(birDayCode.substring(0,4),10); 
  22. var mm = parseInt(birDayCode.substring(4,6),10); 
  23. var dd = parseInt(birDayCode.substring(6),10); 
  24. var xdata = new Date(yyyy,mm-1,dd); 
  25. if(xdata > new Date()){ 
  26. return false;//生日不能大于当前日期 
  27. }else if ( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == dd ) ){ 
  28. return true
  29. }else
  30. return false
  31. }, 
  32. getParityBit: function(idCardNo){ 
  33. var id17 = idCardNo.substring(0,17); 
  34.  
  35. var power = 0; 
  36. for(var i=0;i<17;i++){ 
  37. power += parseInt(id17.charAt(i),10) * parseInt(idCardNoUtil.powers[i]); 
  38.  
  39. var mod = power % 11; 
  40. return idCardNoUtil.parityBit[mod]; 
  41. }, 
  42. checkParityBit: function(idCardNo){ 
  43. var parityBit = idCardNo.charAt(17).toUpperCase(); 
  44. if(idCardNoUtil.getParityBit(idCardNo) == parityBit){ 
  45. return true
  46. }else
  47. return false
  48. }, 
  49. checkIdCardNo: function(idCardNo){ 
  50. //15位和18位身份证号码的基本校验 
  51. var check = /^/d{15}|(/d{17}(/d|x|X))$/.test(idCardNo); 
  52. if(!check) return false
  53. //判断长度为15位或18位 
  54. if(idCardNo.length==15){ 
  55. return idCardNoUtil.check15IdCardNo(idCardNo); 
  56. }else if(idCardNo.length==18){ 
  57. return idCardNoUtil.check18IdCardNo(idCardNo); 
  58. }else
  59. return false
  60. }, 
  61.  
  62. //校验15位的身份证号码 
  63. check15IdCardNo: function(idCardNo){ 
  64. //15位身份证号码的基本校验 
  65. var check = /^[1-9]/d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))/d{3}$/.test(idCardNo); 
  66. if(!check) return false
  67. //校验地址码 
  68. var addressCode = idCardNo.substring(0,6); 
  69. check = idCardNoUtil.checkAddressCode(addressCode); 
  70. if(!check) return false
  71. var birDayCode = '19' + idCardNo.substring(6,12); 
  72. //校验日期码 
  73. return idCardNoUtil.checkBirthDayCode(birDayCode); 
  74. }, 
  75.  
  76. //校验18位的身份证号码 
  77. check18IdCardNo: function(idCardNo){ 
  78. //18位身份证号码的基本格式校验 
  79. var check = /^[1-9]/d{5}[1-9]/d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))/d{3}(/d|x|X)$/.test(idCardNo); 
  80. if(!check) return false
  81. //校验地址码 
  82. var addressCode = idCardNo.substring(0,6); 
  83. check = idCardNoUtil.checkAddressCode(addressCode); 
  84. if(!check) return false
  85. //校验日期码 
  86. var birDayCode = idCardNo.substring(6,14); 
  87. check = idCardNoUtil.checkBirthDayCode(birDayCode); 
  88. if(!check) return false
  89. //验证校检码 
  90. return idCardNoUtil.checkParityBit(idCardNo); 
  91. }, 
  92.  
  93. formateDateCN: function(day){ 
  94. var yyyy =day.substring(0,4); 
  95. var mm = day.substring(4,6); 
  96. var dd = day.substring(6); 
  97. return yyyy + '-' + mm +'-' + dd; 
  98. }, 
  99.  
  100. //获取信息 
  101. getIdCardInfo: function(idCardNo){ 
  102. var idCardInfo = { 
  103. gender:""//性别 
  104. birthday:"" // 出生日期(yyyy-mm-dd) 
  105. }; 
  106. if(idCardNo.length==15){ 
  107. var aday = '19' + idCardNo.substring(6,12); 
  108. idCardInfo.birthday=idCardNoUtil.formateDateCN(aday); 
  109. if(parseInt(idCardNo.charAt(14))%2==0){ 
  110. idCardInfo.gender=idCardNoUtil.genders.female; 
  111. }else
  112. idCardInfo.gender=idCardNoUtil.genders.male; 
  113. }else if(idCardNo.length==18){ 
  114. var aday = idCardNo.substring(6,14); 
  115. idCardInfo.birthday=idCardNoUtil.formateDateCN(aday); 
  116. if(parseInt(idCardNo.charAt(16))%2==0){ 
  117. idCardInfo.gender=idCardNoUtil.genders.female; 
  118. }else
  119. idCardInfo.gender=idCardNoUtil.genders.male; 
  120.  
  121. return idCardInfo; 
  122. }, 
  123. getId15:function(idCardNo){ 
  124. if(idCardNo.length==15){ 
  125. return idCardNo; 
  126. }else if(idCardNo.length==18){ 
  127. return idCardNo.substring(0,6) + idCardNo.substring(8,17); 
  128. }else
  129. return null
  130. }, 
  131. getId18: function(idCardNo){ 
  132. if(idCardNo.length==15){ 
  133. var id17 = idCardNo.substring(0,6) + '19' + idCardNo.substring(6); 
  134. var parityBit = idCardNoUtil.getParityBit(id17); 
  135. return id17 + parityBit; 
  136. }else if(idCardNo.length==18){ 
  137. return idCardNo; 
  138. }else
  139. return null
  140. }; 
  141. //验证护照是否正确 
  142. function checknumber(number){ 
  143. var str=number; 
  144. //在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号 
  145. var Expression=/(P/d{7})|(G/d{8})/; 
  146. var objExp=new RegExp(Expression); 
  147. if(objExp.test(str)==true){ 
  148. return true
  149. }else
  150. return false
  151. }; 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选