commonValidator.js 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133
  1. /**
  2. * validator(校验器)文件 110613
  3. *
  4. *
  5. */
  6. wd.commonValidator={};
  7. var lsSfzh;
  8. /**
  9. * 非空校验器
  10. */
  11. wd.commonValidator.notNull =
  12. function(valueArr,//保存所有被校验的表单值的数组
  13. params//校验器的其余参数
  14. ){
  15. var rs = '';
  16. var msgPrefix = params['msgPrfx'];//消息头
  17. var minValue = params['minLen'];//最断数值
  18. var maxValue = params['maxLen'];//最长数值
  19. var length = params['len'];//长度
  20. var trim =typeof params['trim']=="undefined"?true:params['trim'];//前后空格,true则不能保留空格,trim默认值为true
  21. var allNull =typeof params['allNull']=="undefined"?false:params['allNull'];//允许全部为空 2022-01-10
  22. /// 增加 noZero="true",值为 0 时,也作为空 -- 默认值为 true。Lin
  23. // 解决不允许为空的 码(int)、ID(long) 有默认值 0 的问题
  24. var noZero = (typeof params['noZero']=="undefined")? true : params['noZero'];
  25. ///
  26. if(!wd.commonValidator.condition.call(this,valueArr,params))return rs;
  27. // trim=(trim==null||trim==undefined)?true:trim;//
  28. var regTrim = /(^\s+)|(\s+$)/;
  29. var isNullCount = 0;
  30. var isBlankBefore = false;//曾经有空格
  31. var nullArr=[];
  32. for(var i=0;i<valueArr.length;i++){
  33. var value = valueArr[i];
  34. /* 改,增加 noZero="true",值为 0 时,也作为空 -- 默认值为 true。Lin
  35. if(value==null||value==''||value==undefined){
  36. */ if (value==null || value=='' || value==undefined || (noZero && value==0)) {
  37. nullArr.push(i);
  38. }
  39. /* 在公共校验器已经校验了
  40. if(value!=null&&value!=''){
  41. if(minValue!=null && value.length < minValue){
  42. rs += msgPrefix+'应至少'+minValue+'个字符\r\n';
  43. }
  44. if(maxValue!=null&&value.length> maxValue){
  45. rs += msgPrefix+'应不超过'+maxValue+'个字符\r\n';
  46. }
  47. if(maxValue!=null&&value.length> maxValue){
  48. rs += msgPrefix+'应不超过'+maxValue+'个字符\r\n';
  49. }
  50. }*/
  51. if(trim){
  52. if(value&& regTrim.test(value)&&isBlankBefore==false){
  53. rs += msgPrefix+'前后不能包含空格!\r\n';
  54. isBlankBefore=true;
  55. }
  56. }
  57. }
  58. // isNullCount==valueArr.length
  59. if(nullArr.length>0){
  60. //一个值
  61. if(valueArr.length==1){
  62. rs += msgPrefix+'不能为空!\r\n';
  63. }else{
  64. //多值
  65. var pp=msgPrefix.split(/,/);
  66. if(valueArr.length==nullArr.length){
  67. if(!allNull){
  68. rs += pp.join(",")+'不能全为空!\r\n';
  69. }
  70. }else{
  71. for(var i=0;i<nullArr.length;i++){
  72. var index=nullArr[i];
  73. rs += pp[index]+'不能为空!\r\n';
  74. }
  75. }
  76. }
  77. }
  78. rs += wd.commonValidator.validator(valueArr,params);
  79. return rs;
  80. }
  81. wd.commonValidator.idCard =
  82. function(valueArr,//保存所有被校验的表单值的数组
  83. params//校验器的其余参数
  84. ){
  85. // console.log("---------------------------------------");
  86. // console.log(valueArr);
  87. // console.log(params);
  88. // console.log("---------------------------------------");
  89. var rs = "";//返回的校验结果
  90. var value=valueArr[0];//身份证号值
  91. var sex;
  92. var csdqm;
  93. var birthday;
  94. // value=this.getElementValue("sfzh");
  95. birthday=this.getElementValue("csrq");
  96. if(birthday)
  97. birthday = birthday.replace(/-/g,'');
  98. sex=this.getElementValue("xbm");
  99. csdqm=this.getElementValue("csdqm");
  100. //仅校验身份号码
  101. var sfzjlbm =params['sfzjlbm']||this.getElementValue(params['sfzjlbmName'])||this.getElementValue("sfzjlbm")||"1"; //valueArr[3];//身份证件类别码
  102. var msgPrefix = params['msgPrfx']||"";//消息头
  103. /* 改,增加默认值。Lin
  104. var idCardNotNull = params['idCardNotNull'];//身份证号不能为空
  105. */ var idCardNotNull = (params['notBlank']? params['notBlank'] : false);
  106. if (!value && idCardNotNull)
  107. {
  108. rs+=msgPrefix+'身份证件号不能为空!\r\n';
  109. }
  110. //如果证件类型为身份证,且不为空
  111. //如果身份证为888开头的,就不验证
  112. if(!value||sfzjlbm!=1||value.match(/^888.*/)){
  113. return rs;
  114. }
  115. var getBirthdayByIdCard;
  116. var Errors=new Array(
  117. "",
  118. msgPrefix+"身份证号位数不对!\r\n",
  119. msgPrefix+"身份证号出生日期超出范围或含有非法字符!\r\n",
  120. msgPrefix+"身份证号校验错误!(如果含X的,必须是大写半角的X!)\r\n",
  121. msgPrefix+"身份证地区非法!\r\n"
  122. );
  123. var area={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:"澳门",91:"国外"}
  124. var Y,JYM;
  125. var S,M;
  126. var value_array = new Array();
  127. value_array = value.split("");
  128. switch(value.length){
  129. case 15:
  130. if ((parseInt(value.substr(6,2))+1900) % 4 == 0 || ((parseInt(value.substr(6,2))+1900) % 100 == 0 && (parseInt(value.substr(6,2))+1900) % 4 == 0 )){
  131. ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
  132. } else {
  133. ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
  134. }
  135. if(ereg.test(value)) rs+=Errors[0];
  136. else rs+=Errors[2];
  137. break;
  138. case 18:
  139. //18位身份号码检测
  140. //出生日期的合法性检查
  141. //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
  142. //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
  143. if ( parseInt(value.substr(6,4)) % 4 == 0 || (parseInt(value.substr(6,4)) % 100 == 0 && parseInt(value.substr(6,4))%4 == 0 )){
  144. ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
  145. } else {
  146. ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
  147. }
  148. if(ereg.test(value)){//测试出生日期的合法性
  149. //计算校验位
  150. S = (parseInt(value_array[0]) + parseInt(value_array[10])) * 7
  151. + (parseInt(value_array[1]) + parseInt(value_array[11])) * 9
  152. + (parseInt(value_array[2]) + parseInt(value_array[12])) * 10
  153. + (parseInt(value_array[3]) + parseInt(value_array[13])) * 5
  154. + (parseInt(value_array[4]) + parseInt(value_array[14])) * 8
  155. + (parseInt(value_array[5]) + parseInt(value_array[15])) * 4
  156. + (parseInt(value_array[6]) + parseInt(value_array[16])) * 2
  157. + parseInt(value_array[7]) * 1
  158. + parseInt(value_array[8]) * 6
  159. + parseInt(value_array[9]) * 3 ;
  160. Y = S % 11;
  161. M = "F";
  162. JYM = "10X98765432";
  163. M = JYM.substr(Y,1);//判断校验位
  164. if(M == value_array[17]) rs+=Errors[0]; //检测ID的校验位
  165. else rs+=Errors[3];
  166. }else
  167. rs+=Errors[2];
  168. break;
  169. default:
  170. rs+=Errors[1];
  171. break;
  172. }
  173. // if(birthPlaceValidate&&!rs){
  174. // var csdq = value.substring(0,6);
  175. // if(!csdqm||csdqm!=csdq){//不存在,或者不相等,校验失败
  176. // rs+=msgPrefix+'出生地区与身份证号不符!\r\n';
  177. // }
  178. // }
  179. try{
  180. var setValue = params['autoFill']?params['autoFill']:true;//自动填写性别、出生地区、出生日期
  181. if(!rs&&setValue&&(value.length==15||value.length==18)&&(!birthday||!sex)){
  182. var current_lsSfzh=lsSfzh;
  183. lsSfzh =value;
  184. var xbmVal;
  185. if(value.length == 15){
  186. xbmVal=(value.substring(14,15)%2==0?2:1);
  187. }else{
  188. xbmVal=(value.substring(16,17)%2==0?2:1);
  189. }
  190. this.setElementValue("xbm",xbmVal);
  191. this.setElementValue("csrq",value.substring(6,10)+"-"+value.substring(10,12)+"-"+value.substring(12,14));
  192. //处理出生地区
  193. //批量录入不支持级联,下面唔改住
  194. // var csdqm = value.substring(0,6);
  195. var thiscsdqm= this.getElementValue("csdqm");
  196. var thisjgdqm= this.getElementValue("jgdqm");
  197. thishkdqm= this.getElementValue("hkdqm");
  198. csdqm = value.substring(0,6);
  199. if(current_lsSfzh!=value&&(!thiscsdqm||!thisjgdqm)){
  200. $.ajax({
  201. async: false,
  202. type: "post",
  203. url: "/service?wdService=ry_getDqm",
  204. data: {
  205. dqm: csdqm
  206. },
  207. success: function (data) {
  208. var csdqm = data;
  209. if(!csdqm)return;
  210. if(wd.edit.cascading.getInstance("csdqm")&&!thiscsdqm){
  211. wd.edit.cascading.getInstance("csdqm").setValue(csdqm);
  212. if(wd.edit.objectPicker.getInstance("csxian")&&wd.edit.objectPicker.getInstance("csxian").onchange){
  213. wd.edit.objectPicker.getInstance("csxian").onchange();
  214. }
  215. }
  216. if(wd.edit.cascading.getInstance("jgdqm")&&!thisjgdqm){
  217. wd.edit.cascading.getInstance("jgdqm").setValue(csdqm);
  218. if(wd.edit.objectPicker.getInstance("jgxian")&&wd.edit.objectPicker.getInstance("jgxian").onchange){
  219. wd.edit.objectPicker.getInstance("jgxian").onchange();
  220. }
  221. }
  222. if(wd.edit.cascading.getInstance("hkdqm")&&!thishkdqm){
  223. wd.edit.cascading.getInstance("hkdqm").setValue(csdqm);
  224. }
  225. },
  226. error: function (data) {
  227. console.log(data);
  228. }
  229. })
  230. }
  231. }
  232. // lsSfzh = growHeightList["sfzh"].val();
  233. }catch(e){
  234. console.log(e);
  235. }
  236. //出生日期,性别 先自动填写,再校验
  237. birthday=this.getElementValue("csrq");
  238. if(birthday)
  239. birthday = birthday.replace(/-/g,'');
  240. sex=this.getElementValue("xbm");
  241. var birthDayValidate= params["chkCsrq"]?params["chkCsrq"]:true;//是否关联校验出生日期,默认false,false校验
  242. var sexValidate= params["chkXb"]?params["chkXb"]:true;//是否关联校验性别,默认false,false校验
  243. var birthPlaceValidate= params["chkCsdq"]?params["chkCsdq"]:true;//是否关联校验出生地,默认false,false校验
  244. if(birthDayValidate&&!rs){
  245. var birthdayFromIdCard = value.substring(6,14);
  246. if(!birthday){
  247. //不存在,直接过
  248. }else if(birthday!=birthdayFromIdCard){
  249. // 不相等,校验失败
  250. rs+=msgPrefix+'出生日期与身份证号不符!\r\n';
  251. }
  252. }
  253. if(sexValidate&&!rs){
  254. var sexFromIdCard;
  255. if(value.length == 15){
  256. sexFromIdCard=value.substring(14,15);
  257. }else{
  258. sexFromIdCard=value.substring(16,17);
  259. }
  260. if(!sex||sex%2!=sexFromIdCard%2){//不存在,或者不相等,校验失败
  261. rs+=msgPrefix+'性别与身份证号不符!\r\n';
  262. }
  263. }
  264. /// 增加。Lin
  265. if(!birthPlaceValidate){
  266. var csdq = value.substring(0,6);
  267. if(!csdqm||csdqm!=csdq){//不存在,或者不相等,校验失败
  268. rs+=msgPrefix+'出生地区与身份证号不符!\r\n';
  269. }
  270. }
  271. ///
  272. return rs;
  273. }
  274. /**
  275. * 身份证号校验器
  276. */
  277. wd.commonValidator.idCard20190625 =
  278. function(valueArr,//保存所有被校验的表单值的数组
  279. params//校验器的其余参数
  280. ){
  281. var rs = "";//返回的校验结果
  282. var value = document.querySelector("[name='sfzh']").value// valueArr[0];//身份证号值
  283. var birthday = document.querySelector("[name='csrq']").value//valueArr[1];//出生日期
  284. //var sex = document.querySelector("[name='xbm']").value//valueArr[2];//性别码
  285. var sfzlbmInput=document.querySelector("[name='sfzjlbm']")
  286. var sfzjlbm = sfzlbmInput?sfzlbmInput.value:1 //valueArr[3];//身份证件类别码
  287. if(!sfzjlbm)sfzjlbm=1;
  288. //var csdqm = document.querySelector("[name='csdqm']").value//valueArr[3];//身份证件类别码
  289. var msgPrefix = params['msgPrefix'];//消息头
  290. var idCardNotNull = params['sfzhNotNull'];//身份证号不能为空
  291. //var birthDayNotNull = params['csrqNotNull'];//出生年月不能为空
  292. //var sexNotNull = params['xbNotNull'];//性别不能为空
  293. //var csdqmNotNull = params['csdqmNotNull'];//性别不能为空
  294. var setValue = params['setValue'];//自动填写性别、出生地区、出生日期
  295. if(!msgPrefix)//如果用户有输入消息头
  296. msgPrefix='';
  297. var msgPrefix = params['msgPrefix'];//消息头
  298. if (!value && idCardNotNull)
  299. {
  300. rs+=msgPrefix+'身份证件号不能为空!\r\n';
  301. }
  302. /*if(!birthday&&birthDayNotNull)
  303. rs+=msgPrefix+'出生日期不能为空!\r\n';
  304. else{
  305. if(birthDayNotNull){
  306. birthday = birthday.replace(/-/g,'');
  307. }
  308. }*/
  309. if(birthday)
  310. birthday = birthday.replace(/-/g,'');
  311. /*if(!sex&&sexNotNull)
  312. rs+=msgPrefix+'性别不能为空!\r\n';
  313. if(!csdqm&&csdqmNotNull){
  314. rs+=msgPrefix+'出生地区不能为空!\r\n';
  315. }*/
  316. if(value&&(!sfzjlbm||sfzjlbm==1)){//如果证件类型为身份证,且不为空
  317. if(value.match(/^888.*/)){//如果身份证为888开头的,就不验证
  318. }else{
  319. var Errors=new Array(
  320. "",
  321. msgPrefix+"身份证号位数不对!\r\n",
  322. msgPrefix+"身份证号出生日期超出范围或含有非法字符!\r\n",
  323. msgPrefix+"身份证号校验错误!(如果含X的,必须是大写半角的X!)\r\n",
  324. msgPrefix+"身份证地区非法!\r\n"
  325. );
  326. var area={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:"澳门",91:"国外"}
  327. var value,Y,JYM;
  328. var S,M;
  329. var value_array = new Array();
  330. value_array = value.split("");
  331. //地区检验
  332. //if(csdqm.substr(0,4)!=value.substr(0,4)/*area[parseInt(value.substr(0,2))]==null*/) rs+=Errors[4];
  333. //身份号码位数及格式检验
  334. switch(value.length){
  335. case 15:
  336. if ((parseInt(value.substr(6,2))+1900) % 4 == 0 || ((parseInt(value.substr(6,2))+1900) % 100 == 0 && (parseInt(value.substr(6,2))+1900) % 4 == 0 )){
  337. ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
  338. } else {
  339. ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
  340. }
  341. if(ereg.test(value)) rs+=Errors[0];
  342. else rs+=Errors[2];
  343. //校验出生年月
  344. /*if(birthday){
  345. var birthdayFromIdCard = value.substring(6,12);
  346. if(birthday!=birthdayFromIdCard)
  347. rs+=msgPrefix+'出生日期与身份证号不符!\r\n';
  348. }
  349. //校验性别
  350. if(sex){
  351. var sexFromIdCard = value.substring(14,15);
  352. if(sex%2!=sexFromIdCard%2)
  353. rs+=msgPrefix+'性别与身份证号不符!\r\n';
  354. }*/
  355. break;
  356. case 18:
  357. //18位身份号码检测
  358. //出生日期的合法性检查
  359. //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
  360. //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
  361. if ( parseInt(value.substr(6,4)) % 4 == 0 || (parseInt(value.substr(6,4)) % 100 == 0 && parseInt(value.substr(6,4))%4 == 0 )){
  362. ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
  363. } else {
  364. ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
  365. }
  366. if(ereg.test(value)){//测试出生日期的合法性
  367. //计算校验位
  368. S = (parseInt(value_array[0]) + parseInt(value_array[10])) * 7
  369. + (parseInt(value_array[1]) + parseInt(value_array[11])) * 9
  370. + (parseInt(value_array[2]) + parseInt(value_array[12])) * 10
  371. + (parseInt(value_array[3]) + parseInt(value_array[13])) * 5
  372. + (parseInt(value_array[4]) + parseInt(value_array[14])) * 8
  373. + (parseInt(value_array[5]) + parseInt(value_array[15])) * 4
  374. + (parseInt(value_array[6]) + parseInt(value_array[16])) * 2
  375. + parseInt(value_array[7]) * 1
  376. + parseInt(value_array[8]) * 6
  377. + parseInt(value_array[9]) * 3 ;
  378. Y = S % 11;
  379. M = "F";
  380. JYM = "10X98765432";
  381. M = JYM.substr(Y,1);//判断校验位
  382. if(M == value_array[17]) rs+=Errors[0]; //检测ID的校验位
  383. else rs+=Errors[3];
  384. }else
  385. rs+=Errors[2];
  386. //校验出生年月
  387. /*if(birthday){
  388. var birthdayFromIdCard = value.substring(6,14);
  389. if(birthday!=birthdayFromIdCard){
  390. rs+=msgPrefix+'出生日期与身份证号不符!\r\n';
  391. }
  392. }
  393. //校验性别
  394. if(sex){
  395. var sexFromIdCard = value.substring(16,17);
  396. if(sex%2!=sexFromIdCard%2)
  397. rs+=msgPrefix+'性别与身份证号不符!\r\n';
  398. }*/
  399. break;
  400. default:
  401. rs+=Errors[1];
  402. break;
  403. }
  404. }
  405. }
  406. //回显性别、出生日期、地区
  407. if(!rs&&setValue){
  408. if(value.length == 15){
  409. wd.edit.objectPicker.getInstance("xbm").initValue(value.substring(14,15)%2==0?2:1);
  410. }else{
  411. wd.edit.objectPicker.getInstance("xbm").initValue(value.substring(16,17)%2==0?2:1);
  412. }
  413. document.querySelector("[name='csrq']").value = value.substring(6,10)+"-"+value.substring(10,12)+"-"+value.substring(12,14);
  414. //处理出生地区
  415. var csdqm = value.substring(0,6);
  416. var csdqmstr = String(csdqm);
  417. var csshengdqm=csdqmstr.substring(0,2)+"0000";
  418. var csshidqm=csdqmstr.substring(0,4)+"00";
  419. if($("input[name='csdqm']").val()){
  420. return rs;
  421. }
  422. wd.edit.objectPicker.getInstance("cssheng").initValue(csshengdqm);
  423. wd.edit.objectPicker.getInstance("csshi").initValue(csshidqm);
  424. $("input[name=xbm]").click();//需要触发一次,否则级联无法生效
  425. wd.edit.objectPicker.getInstance("csxian").initValue(csdqm);
  426. $("input[name='csdqm']").val(csdqm);
  427. if($("input[name='hkdqm']").val()){
  428. return rs;
  429. }
  430. wd.edit.objectPicker.getInstance("hksheng").initValue(csshengdqm);
  431. wd.edit.objectPicker.getInstance("hkshi").initValue(csshidqm);
  432. //$("input[name=xbm]").click();//需要触发一次,否则级联无法生效
  433. wd.edit.objectPicker.getInstance("hkxian").initValue(csdqm);
  434. $("input[name='hkdqm']").val(csdqm);
  435. }
  436. return rs;
  437. }
  438. /**
  439. * 浮点数校验器
  440. */
  441. wd.commonValidator.float =
  442. function(valueArr,//保存所有被校验的表单值的数组
  443. params//校验器的其余参数
  444. ){
  445. var rs = '';
  446. var value = valueArr[0];
  447. var msgPrefix = params['msgPrfx'];//消息头
  448. var minValue = params['minVal'];//最小数值
  449. var maxValue = params['maxVal'];//最大数值
  450. var decimalLength = params['decLen'];//保留几位
  451. var reg = new RegExp('^\\d+(\\.\\d{0,'+decimalLength+'})?$');
  452. var regValue = new RegExp('^\\d+(\\.\\d+)?$');
  453. var notNull = params['notBlank']==null?false:params['notBlank'];
  454. if(notNull){
  455. rs += wd.commonValidator.notNull(valueArr,params);
  456. }else{
  457. rs += wd.commonValidator.validator(valueArr,params);
  458. }
  459. if(value!=null&&value!=''){
  460. if(!minValue)//minValue值不指定默认为0
  461. minValue="0";
  462. // if(!regValue.test(value)){
  463. if(isNaN(value)){
  464. rs += msgPrefix+'应为数字!\r\n';
  465. }else{
  466. // if(minValue!=null&&value<minValue){
  467. // rs += msgPrefix+'应不小于'+minValue+'\r\n';
  468. // }
  469. // if(maxValue!=null&&value>maxValue){
  470. // rs += msgPrefix+'应不大于'+maxValue+'\r\n';
  471. // }
  472. if(minValue!=null && (parseInt(value) < parseInt(minValue)&&minValue!="-")){
  473. rs += msgPrefix+'应不小于'+minValue+'\r\n';
  474. }
  475. if(maxValue!=null&&(parseInt(value) > parseInt(maxValue)&&maxValue!="+")){
  476. rs += msgPrefix+'应不大于'+maxValue+'\r\n';
  477. }
  478. // if(decimalLength!=null&&!reg.test(value)){
  479. var arr=value.toString().split(".");
  480. if(arr.length>1&&arr[1].length>parseInt(decimalLength)){
  481. rs += msgPrefix+'小数部分应不多于'+decimalLength+'位。\r\n';
  482. }
  483. }
  484. }
  485. return rs;
  486. }
  487. /**
  488. * 整数校验器
  489. */
  490. wd.commonValidator.int =
  491. function(valueArr,//保存所有被校验的表单值的数组
  492. params//校验器的其余参数
  493. ){
  494. var rs = '';
  495. var value = valueArr[0];
  496. var msgPrefix = params['msgPrfx'];//消息头
  497. var minValue = params['minVal'];//最小数值
  498. var maxValue = params['maxVal'];//最大数值
  499. var regValue = new RegExp('^[1-9]*[1-9][0-9]*$');
  500. var notNull = params['notBlank']==null?false:params['notBlank'];
  501. if(notNull){
  502. rs += wd.commonValidator.notNull(valueArr,params);
  503. }else{
  504. rs += wd.commonValidator.validator(valueArr,params);
  505. }
  506. //minValue值不指定默认为0
  507. if(!minValue){
  508. minValue="0";
  509. }
  510. if(value!=null&&value!=''){
  511. // if(value != 0 && !regValue.test(value)){
  512. // rs += msgPrefix+'应为正整数!\r\n';
  513. // }
  514. if(isNaN(value)){
  515. rs += msgPrefix+'应为整数!\r\n';
  516. }
  517. if(minValue!=null && (parseInt(value) < parseInt(minValue)&&minValue!="-")){
  518. rs += msgPrefix+'应不小于'+minValue+'\r\n';
  519. }
  520. if(maxValue!=null&&(parseInt(value) > parseInt(maxValue)&&maxValue!="+")){
  521. rs += msgPrefix+'应不大于'+maxValue+'\r\n';
  522. }
  523. }
  524. return rs;
  525. }
  526. /**
  527. * 2022-3-1 新加的整数校验器,isInt不知谁改成了数字校验器!!
  528. */
  529. wd.commonValidator.isInteger =
  530. function(valueArr,//保存所有被校验的表单值的数组
  531. params//校验器的其余参数
  532. ){
  533. var rs = '';
  534. var value = valueArr[0];
  535. var msgPrefix = params['msgPrfx'];//消息头
  536. var minValue = params['minVal'];//最小数值
  537. var maxValue = params['maxVal'];//最大数值
  538. var regValue = new RegExp('^[1-9]*[1-9][0-9]*$');
  539. var notNull = params['notBlank']==null?false:params['notBlank'];
  540. if(notNull){
  541. rs += wd.commonValidator.notNull(valueArr,params);
  542. }
  543. rs += wd.commonValidator.validator(valueArr,params);
  544. if(value!=null&&value!=''){
  545. if(value != 0 && !regValue.test(value)){
  546. rs += msgPrefix+'应为正整数!\r\n';
  547. }
  548. if(!rs&&minValue&& value <minValue){
  549. rs += msgPrefix+'应不小于'+minValue+'\r\n';
  550. }
  551. if(!rs&&maxValue&&value>maxValue){
  552. rs += msgPrefix+'应不大于'+maxValue+'\r\n';
  553. }
  554. }
  555. return rs;
  556. }
  557. /**
  558. * 金额数校验器
  559. */
  560. wd.commonValidator.money =
  561. function(valueArr,//保存所有被校验的表单值的数组
  562. params//校验器的其余参数
  563. ){
  564. var rs = '';
  565. var value = valueArr[0];
  566. var msgPrefix = params['msgPrfx'];//消息头
  567. var reg = new RegExp('^\\d+(\\.\\d{0,2})?$');
  568. var regValue = new RegExp('^\\d+(\\.\\d+)?$');
  569. rs += wd.commonValidator.float(valueArr,params);
  570. if(regValue.test(value)&&value!=null&&value!=''&&!reg.test(value)){
  571. rs += msgPrefix+'小数部分应在两位以内。\r\n';
  572. }
  573. return rs;
  574. }
  575. /**
  576. * 公共校验器
  577. */
  578. wd.commonValidator.validator =
  579. function(valueArr,//保存所有被校验的表单值的数组
  580. params//校验器的其余参数
  581. ){
  582. var rs = '';
  583. var value = valueArr[0];
  584. var msgPrefix = params['msgPrfx'];//消息头
  585. var noBlank = params['notBlank']==null?false:params['notBlank'];
  586. var minLength = params['minLen'];
  587. var maxLength = params['maxLen'];
  588. var length = params['len'];
  589. var regNoBlank = /\s/g;
  590. var regMin = new RegExp("^.{"+minLength+",}$");
  591. var regMax = new RegExp("^.{0,"+maxLength+"}$");
  592. var regScope = new RegExp("^.{"+minLength+","+maxLength+"}$");
  593. var regLength = new RegExp("^.{"+length+"}$");
  594. if(value!=null&&value!=''){
  595. if(noBlank&&regNoBlank.test(value)){
  596. rs += msgPrefix+'不能含空格!\r\n';
  597. }
  598. if(minLength!=null&&!(value.length>=minLength)){
  599. rs += msgPrefix+'应至少'+minLength+'个字符!\r\n';
  600. }else if(maxLength!=null&&minLength!=null&&(value.length>=minLength&&value.length<=maxLength)){
  601. //rs += msgPrefix+'必需在'+minLength+' ~'+maxLength+'!\r\n';
  602. }else if(maxLength!=null&&!(value.length<=maxLength)){
  603. rs += msgPrefix+'长度应不超过'+maxLength+'\r\n';
  604. }
  605. if(length!=null&&!(value.length==length)){
  606. rs += msgPrefix+'必需等于'+length+'!\r\n';
  607. }
  608. }
  609. return rs;
  610. }
  611. /**
  612. * 内容管理技术规范的编码规则:[a-zA-Z_0-9] 和减号 校验器
  613. */
  614. wd.commonValidator.contentCodeRule =
  615. function(valueArr,//保存所有被校验的表单值的数组
  616. params//校验器的其余参数
  617. ){
  618. var rs = '';
  619. var value = valueArr[0];
  620. var msgPrefix = params['msgPrfx'];//消息头
  621. var regValue = new RegExp('^[\w-]+$');
  622. var notNull = params['notBlank']==null?false:params['notBlank'];
  623. if(notNull){
  624. rs += wd.commonValidator.notNull(valueArr,params);
  625. }else{
  626. rs += wd.commonValidator.validator(valueArr,params);
  627. }
  628. if(value!=null&&value!=''){
  629. if(value != 0 && !regValue.test(value)){
  630. rs += msgPrefix+'必需由字母、数字、减号、下划线组成!\r\n';
  631. }
  632. }
  633. return rs;
  634. }
  635. /**
  636. * 页码,只允许字母和数字
  637. */
  638. wd.commonValidator.pageNum =
  639. function(valueArr,//保存所有被校验的表单值的数组
  640. params//校验器的其余参数
  641. ){
  642. var rs = '';
  643. var value = valueArr[0];
  644. var msgPrefix = params['msgPrfx'];//消息头
  645. var regValue = new RegExp('^[\\da-zA-Z]+$');
  646. var notNull = params['notBlank']==null?false:params['notBlank'];
  647. if(notNull){
  648. rs += wd.commonValidator.notNull(valueArr,params);
  649. }else{
  650. rs += wd.commonValidator.validator(valueArr,params);
  651. }
  652. if(value!=null&&value!=''){
  653. if(value != 0 && !regValue.test(value)){
  654. rs += msgPrefix+'必需由字母、数字组成!\r\n';
  655. }
  656. }
  657. return rs;
  658. }
  659. /**
  660. * 英文名
  661. * 由数字、字母和下划线组成,长度为2-30个字符
  662. */
  663. wd.commonValidator.enName = function(valueArr, params){
  664. var rs = '';
  665. var value = valueArr[0];
  666. var msgPrefix = params['msgPrfx'];
  667. var regValue = new RegExp('^\\w{2,30}$');
  668. var notNull = params['notBlank'] == null ? false : params['notBlank'];
  669. if(notNull){
  670. rs += wd.commonValidator.notNull(valueArr, params);
  671. }
  672. if(value != null && value != ''){
  673. if(!regValue.test(value)){
  674. rs += msgPrefix + '只能由数字、字母和下划线组成,长度为2-30个字符!\r\n';
  675. }
  676. // var ryid =$('#ryid').val()||$('input[name=ryid]').val();
  677. var ryid=this.getElementValue("ryid");
  678. var cb = $.ajax({type: "post",
  679. url: "/service?&wdService=ry_yzywm",
  680. data:{'userywm':valueArr.toString(), 'ryid': ryid},
  681. cache:false,
  682. async:false,
  683. dataType: "json" });
  684. if(cb.status==404){
  685. rs+="服务器连接失败!刷新页面";
  686. }else{
  687. var queryData = cb.responseJSON;
  688. if(queryData.isFind != "false"){
  689. rs+="英文名已存在!";
  690. }
  691. }
  692. }
  693. return rs;
  694. }
  695. wd.commonValidator.csenName = function(valueArr, params){
  696. var rs = '';
  697. var value = valueArr[0];
  698. var msgPrefix = params['msgPrfx'];
  699. var regValue = new RegExp('^\\w{2,30}$');
  700. var notNull = params['notBlank'] == null ? false : params['notBlank'];
  701. if(notNull){
  702. rs += wd.commonValidator.notNull(valueArr, params);
  703. }
  704. if(value != null && value != ''){
  705. if(!regValue.test(value)){
  706. rs += msgPrefix + '只能由数字、字母和下划线组成,长度为2-30个字符!\r\n';
  707. }
  708. // var ryid =$('#ryid').val()||$('input[name=ryid]').val();
  709. var ryid=this.getElementValue("ryid");
  710. var cb = $.ajax({type: "post",
  711. url: "/service?&wdService=csry_yzywm",
  712. data:{'userywm':valueArr.toString(), 'ryid': ryid},
  713. cache:false,
  714. async:false,
  715. dataType: "json" });
  716. if(cb.status==404){
  717. rs+="服务器连接失败!刷新页面";
  718. }else{
  719. var queryData = cb.responseJSON;
  720. if(queryData.isFind != "false"){
  721. rs+="英文名已存在!";
  722. }
  723. }
  724. }
  725. return rs;
  726. }
  727. /**
  728. * 域名唯一
  729. *
  730. */
  731. wd.commonValidator.ymwy = function(valueArr, params){
  732. var rs = '';
  733. var value = valueArr[0];
  734. var msgPrefix = params['msgPrfx'];//消息头
  735. var regValue = new RegExp('^[\w-]+$');
  736. var notNull = params['notBlank']==null?false:params['notBlank'];
  737. if(notNull){
  738. rs += wd.commonValidator.notNull(valueArr, params);
  739. }
  740. if(value!=null&&value!=''){
  741. // var wangzid = ($('input[name="wangzid"]') != undefined ? $('input[name="wangzid"]').val() : $('#wangzid').val());
  742. var wangzid=this.getElementValue("wangzid");
  743. var cb = $.ajax({
  744. type:'post' ,
  745. url:"/service?wdService=grwzbj_wz_ym_wy",
  746. data:{
  747. ym:value,
  748. wangzid:wangzid
  749. },
  750. dataType:"json",
  751. async:false,
  752. });
  753. if(cb.status==404){
  754. rs+="服务器连接失败!刷新页面";
  755. }else{
  756. var queryData = cb.responseJSON;
  757. if(queryData.isFind != false){
  758. rs+="域名已存在!";
  759. }
  760. }
  761. }
  762. return rs;
  763. }
  764. /**
  765. * 附件是否为空校验
  766. * @param {*} valueArr
  767. * @param {*} params
  768. * @returns
  769. */
  770. wd.commonValidator.fjNotNull =
  771. function(valueArr,//保存所有被校验的表单值的数组
  772. params//校验器的其余参数
  773. ){
  774. var rs = '';
  775. var msgPrefix = params['msgPrfx'];//消息头
  776. //var nrid = this.getElementValue("fjid");
  777. var nrid=valueArr[0];
  778. if (!nrid) {
  779. rs += msgPrefix+'不能为空!\r\n';
  780. } else {
  781. $.ajax({
  782. async: false,
  783. type: "post",
  784. url: "/service?wdService=getSubNrCount",
  785. data: {
  786. nrid: "T-" + nrid,
  787. jlztm:1
  788. },
  789. success: function (data) {
  790. var names = JSON.parse(data);
  791. var isArray = $.isArray(names);
  792. if (!isArray || names.length <= 0) {
  793. rs += msgPrefix+'不能为空!\r\n';
  794. }
  795. },
  796. error: function (data) {
  797. console.log(data);
  798. }
  799. })
  800. }
  801. rs += wd.commonValidator.validator(valueArr,params);
  802. return rs;
  803. }
  804. /**
  805. * 大于
  806. * @param {Object} valueArr
  807. * @param {Object} params
  808. */
  809. wd.commonValidator.greater = function(valueArr, params){
  810. var rs = '';
  811. var msgPrefix = params['msgPrfx'];//消息头
  812. var pp=msgPrefix.split(/,/);
  813. msgPrefix=pp[0]+"大于"+pp[1]+"! \r\n";
  814. if(valueArr.length<2){
  815. return rs;
  816. }
  817. var leftValue=valueArr[0];
  818. var rightValue=valueArr[1];
  819. if(!leftValue||!rightValue){
  820. return rs;
  821. }
  822. var eq =typeof params['equal']=="undefined"?false:params['equal'];//包括大小相等
  823. if(!!parseFloat(leftValue)&&!!parseFloat(rightValue) ){
  824. if(eq){
  825. if(parseFloat(leftValue)<parseFloat(rightValue)){
  826. // console.log(arguments);
  827. rs += msgPrefix;
  828. }
  829. }else{
  830. if(parseFloat(leftValue)<=parseFloat(rightValue)){
  831. // console.log(arguments);
  832. rs += msgPrefix;
  833. }
  834. }
  835. }
  836. return rs;
  837. }
  838. /**
  839. * 小于
  840. * @param {Object} valueArr
  841. * @param {Object} params
  842. */
  843. wd.commonValidator.less = function(valueArr, params){
  844. var rs = '';
  845. var msgPrefix = params['msgPrfx'];//消息头
  846. var pp=msgPrefix.split(/,/);
  847. msgPrefix=pp[0]+"小于"+pp[1]+"! \r\n";
  848. var eq =typeof params['equal']=="undefined"?false:params['equal'];//包括大小相等
  849. if(valueArr.length>=2&&!!parseFloat(valueArr[0])&&!!parseFloat(valueArr[1]) ){
  850. if(eq){
  851. if(parseFloat(valueArr[0])>parseFloat(valueArr[1])){
  852. // console.log(arguments);
  853. rs += msgPrefix;
  854. }
  855. }else{
  856. if(parseFloat(valueArr[0])>=parseFloat(valueArr[1])){
  857. // console.log(arguments);
  858. rs += msgPrefix;
  859. }
  860. }
  861. }
  862. return rs;
  863. }
  864. /**
  865. * 不等于
  866. * @param {Object} valueArr
  867. * @param {Object} params
  868. */
  869. wd.commonValidator.notEqual = function(valueArr, params){
  870. var rs = '';
  871. var msgPrefix = params['msgPrfx'];//消息头
  872. var pp=msgPrefix.split(/,/);
  873. console.log(valueArr);
  874. for(var i=0;i<valueArr.length;i++){
  875. if(!valueArr[i])continue;
  876. var index=valueArr.indexOf(valueArr[i],i+1);
  877. if(index!=-1){
  878. rs+=pp[i]+"和"+pp[index]+"不能相同!\r\n";
  879. break;
  880. }
  881. }
  882. return rs;
  883. }
  884. wd.commonValidator.condition=function(valueArr, params){
  885. //满足条件才会校验
  886. if(params['condition']){
  887. try{
  888. //xybalxm:["51"]
  889. var condition=eval("({"+params['condition']+"})");
  890. for(var key in condition){
  891. var n=this.getElementValue(key);
  892. if(condition[key].indexOf(n)==-1){
  893. return false;
  894. }
  895. }
  896. }catch(e){
  897. console.log(e);
  898. }
  899. }
  900. return true;
  901. }
  902. /**
  903. * 数值是否已存在校验
  904. * @param {*} valueArr
  905. * @param {*} params
  906. * @returns
  907. */
  908. wd.commonValidator.exists = function(valueArr, params){
  909. var rs = '';
  910. //表名
  911. var table = params['tab']; // ['table']。Lin
  912. //字段名
  913. var field = params['field'];
  914. //数值
  915. var value = valueArr[0];
  916. //主键
  917. /* 改为改用 对象ID。Lin
  918. var id = this.getElementValue("validationId");;
  919. */
  920. /* 再改,ID 字段名由上层决定。Lin
  921. var id = this.getElementValue(table+"id");
  922. */
  923. var idName = params['id'];
  924. var id = this.getElementValue(idName);
  925. if(value!=null&&value!=''){
  926. var cb = $.ajax({type: "post",
  927. url: "/service?&wdService=chkDup",
  928. /* 再改,增加 "idName" -- ID 字段名由上层决定。Lin
  929. data:{'table':table, 'field': field, 'value': value, 'id': id},
  930. */ data:{'table':table, 'field': field, 'value': value, 'id': id, 'idName': idName},
  931. cache:false,
  932. async:false,
  933. dataType: "json" });
  934. var queryData = cb.responseJSON;
  935. if(queryData.isFind != "false"){
  936. rs= params['msg'];
  937. }
  938. }
  939. return rs;
  940. }
  941. // 增加,多个字段值是否匹配。Lin
  942. // <notMatch field="jfrxm,jfrgrdh" parm="{relField:'jfrxm,jfrgrdh',srcTab:'ry',srcField:['xm','grdh']}"/>
  943. wd.commonValidator.chkMatch = function(valueArr, params){
  944. var rs = '';
  945. //表名
  946. var table = params['srcTab']; // "ry"(人员)。Lin
  947. //字段名
  948. var field = params['srcField']; // "xm,grdh"(姓名,个人电话)。Lin
  949. //数值
  950. /* 增加 parm="{relField:'jfrxm,jfrgrdh', -- 相关的页面字段。Lin
  951. * 去掉原来的 <ichker defField="['sfzh','csrq','xbm']
  952. * value,串成 "张三,12345"
  953. var value = valueArr[0];
  954. */
  955. var relField = params['relField']; // "jfrxm,jfrgrdh"(接访人姓名,接访人个人电话)。Lin
  956. if (relField == null || relField == "")
  957. return rs;
  958. var value = "";
  959. var fieldArr = relField.split(",");
  960. for(var i = 0; i < fieldArr.length; i++) {
  961. var v = this.getElementValue(fieldArr[i]);
  962. if (v == null || v == "") {
  963. value = "";
  964. break;
  965. }
  966. if (value != "")
  967. value += ",";
  968. value += v.trim();
  969. }
  970. if (value == "")
  971. return rs;
  972. var cb = $.ajax({type: "post",
  973. url: "/service?&wdService=chkMatch",
  974. data:{'table':table, 'field': field, 'value': value},
  975. cache:false,
  976. async:false,
  977. dataType: "json" });
  978. var queryData = cb.responseJSON;
  979. if (queryData.isMatch == "false") {
  980. rs= params['msg'];
  981. }
  982. return rs;
  983. }