//获取url参数 export function getQueryVariable(variable, urlInfo) { let url = decodeURI(decodeURI(urlInfo || window.location.href)) console.log(url) let i = url.indexOf('?') let queryStr = url.substr(i+1) let vars = queryStr.split("&"); for (let i=0;i<vars.length;i++) { let pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } return ''; } // 判断ios还是安卓 export function isIOSWebKit() { const aa = window.navigator.userAgent; if (!!aa.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {// ios端 return true; } else if (aa.indexOf('Android') !== -1 || aa.indexOf('Adr') !== -1) {// 安卓端 return false; } } //当前方法传参数两种 字符串或者map export function callMobile(handlerInterface, parameters) { let classStr = Object.prototype.toString.call(parameters); if (classStr === '[object String]' || classStr === '[object Object]') { let param = parameters; if (classStr === "[object Object]") { //判断传参是str ,还是object //handlerInterface由iOS addScriptMessageHandler与andorid addJavascriptInterface 代码注入而来。 param = JSON.stringify(parameters);//参数必须转化成json格式 } try { if (isIOSWebKit()) {//ios if (window.webkit !== undefined) { if (param == '{}') { window.webkit.messageHandlers[handlerInterface].postMessage(null); } else { window.webkit.messageHandlers[handlerInterface].postMessage(param); } } } else if (isIOSWebKit() === false) { //安卓传输不了js json对象,只能传输string if (param == '{}') { window.H5page[handlerInterface](); } else { window.H5page[handlerInterface](param); } } } catch (e) { } } } // 验证身份证号 带校验位 export const validateIdCard = (idCard) => { let flag = false; // 15位和18位身份证号码的正则表达式 const regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/; // 如果通过该验证,说明身份证格式正确,但准确性还需计算 if (regIdCard.test(idCard)) { if (idCard.length === 18) { const idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 将前17位加权因子保存在数组里 const idCardY = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 这是除以11后,可能产生的11位余数、验证码,也保存成数组 let idCardWiSum = 0; // 用来保存前17位各自乖以加权因子后的总和 for (let i = 0; i < 17; i++) { idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i]; } const idCardMod = idCardWiSum % 11; // 计算出校验码所在数组的位置 const idCardLast = idCard.substring(17); // 得到最后一位身份证号码 // 如果等于2,则说明校验码是10,身份证号码最后一位应该是X if (idCardMod === 2) { flag = idCardLast === 'X' || idCardLast === 'x'; } else { // 用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码 flag = idCardLast === ToString(idCardY[idCardMod]); } } } else { flag = false; } return flag; }; /** * 身份证带校验位验证 * @param type 0 不限男女 1 男 2 女 */ // 身份证正则 export const idCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/; // 男性身份证正则 export const menIdCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[1|3|5|7|9][0-9Xx]$)/; // 女性身份证正则 export const womenIdCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0|2|4|6|8][0-9Xx]$)/; export const idCardValidator = (value) => { const reg = [idCardReg, menIdCardReg, womenIdCardReg][0]; const val = value.trim(); const flag = validateIdCard(value); if ((!flag || !reg.test(value)) && val) { return new Promise(resolve => { resolve(false) }) } new Promise(resolve => { resolve(true) }) }; //身份证方法校验 export const idCardV = (value, type = 0)=> { const reg = [idCardReg, menIdCardReg, womenIdCardReg][type]; const val = value.trim(); const flag = validateIdCard(value); if ((!flag || !reg.test(value)) && val) { return false } return true } // 转换字符串 export const ToString = str => { if (str === 0) { return "0"; } str = str || ""; return str.toString(); };