rule.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. function isNumber(v){
  2. return v instanceof Number
  3. }
  4. function toString(v){
  5. // 情况1 非对象,直接调用内部值
  6. if(isNumber(v)) {
  7. return v + ''
  8. }
  9. return v + '';
  10. }
  11. let requiredRuleItem = {require: true,message:'该项为必填项'}
  12. let phoneRule = [{
  13. type: 'string',
  14. length: 11,
  15. message: '手机号长度必须是11字符'
  16. },{
  17. regex: /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/,
  18. message: '手机号格式不正确'
  19. }]
  20. let passwordRule= [{
  21. type: 'string',
  22. minLength: 6,
  23. maxLength: 18,
  24. message: '密码长度为6-18'
  25. }]
  26. let imeiRule = [{
  27. type: 'string',
  28. length: 15,
  29. message: 'IMEI号长度应该为15位'
  30. }]
  31. const ownerRule= [
  32. requiredRuleItem,
  33. {
  34. type: 'string',
  35. minLength: 1,
  36. maxLength: 16,
  37. message: '用户名owner类型或者长度不一致'
  38. },
  39. ]
  40. const captchaRule = [{
  41. type: 'string',
  42. length: 4,
  43. message: '验证码长度为4'
  44. }]
  45. const nameRule = [
  46. {
  47. type: 'string',
  48. min: 1,
  49. max: 25,
  50. message: '名称长度不符合'
  51. }
  52. ]
  53. const hrefRule = [
  54. {
  55. type: 'string',
  56. min: 1,
  57. max: 500,
  58. message: '链接长度不符合'
  59. },
  60. {
  61. type: 'string',
  62. // 是否符合url地址,支持域名与ip/^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/
  63. regex: /(https?|ftp|file|http):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/,
  64. message: '链接格式不正确'
  65. },
  66. ];
  67. const requireIdRule = [
  68. requiredRuleItem,
  69. ]
  70. let checkCode = function (val) {
  71. let p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  72. let factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
  73. let parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
  74. let code = val.substring(17);
  75. if(p.test(val)) {
  76. let sum = 0;
  77. for(let i=0;i<17;i++) {
  78. sum += val[i]*factor[i];
  79. }
  80. console.log(typeof parity[sum % 11])
  81. console.log(typeof code.toUpperCase())
  82. if(toString(parity[sum % 11]) === code.toUpperCase()) {
  83. return true;
  84. }
  85. }
  86. return false;
  87. }
  88. let checkDate = function (val) {
  89. var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/;
  90. if(pattern.test(val)) {
  91. var year = val.substring(0, 4);
  92. var month = val.substring(4, 6);
  93. var date = val.substring(6, 8);
  94. var date2 = new Date(year+"-"+month+"-"+date);
  95. if(date2 && date2.getMonth() === (parseInt(month) - 1)) {
  96. return true;
  97. }
  98. }
  99. return false;
  100. }
  101. let checkProv = function (val) {
  102. let pattern = /^[1-9][0-9]/;
  103. let provs = {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:"澳门"};
  104. if(pattern.test(val)) {
  105. if(provs[val]) {
  106. return true;
  107. }
  108. }
  109. return false;
  110. }
  111. const checkID = function (val) {
  112. if(checkCode(val)) {
  113. console.log('code')
  114. let date = val.substring(6,14);
  115. if(checkDate(date)) {
  116. if(checkProv(val.substring(0,2))) {
  117. console.log('匹配成功')
  118. return true;
  119. }
  120. }
  121. }
  122. return false;
  123. }
  124. const cardRule = [
  125. requiredRuleItem,
  126. function(val){
  127. return checkID(val)?'':'身份证验证失败';
  128. }]
  129. const paramsRules = [
  130. {
  131. name: "用户名验证规则",
  132. checkFields: ['name','workerName','buildingName','entranceName'],
  133. rules: nameRule,
  134. },
  135. {
  136. name: "设备imei号验证",
  137. checkFields: ['imei','IMEI','Imei'],
  138. rules: imeiRule,
  139. },
  140. {
  141. name: "类型等必填项验证规则",
  142. checkFields: ['workerType','type','cameraType','buildingAbout','entranceId'],
  143. rules: [requiredRuleItem],
  144. },
  145. {
  146. name: "手机号验证",
  147. checkFields: ['phone','workerPhone','companyPhone'],
  148. rules: phoneRule,
  149. },
  150. {
  151. name: "验证码验证",
  152. checkFields:['captcha','captchaImg'],
  153. rules:captchaRule
  154. },
  155. {
  156. name: "账户",
  157. checkFields:['owner','account'],
  158. rules:ownerRule
  159. },
  160. {
  161. checkFields:['passwd', 'password'],
  162. rules:passwordRule
  163. },
  164. {
  165. checkFields: ['card', 'workerCard'],
  166. rules: cardRule,
  167. },
  168. {
  169. checkFields: ['href', 'url'],
  170. rules: hrefRule,
  171. },
  172. {
  173. checkFields: [/id/gi,'fileData', 'remark'],
  174. rules: requireIdRule
  175. }
  176. ]
  177. module.exports = {
  178. paramsRules
  179. }