const QRCode = require('qrcode'); import { visitorRecords } from '../api/api' //身份证号校验 const isCardID = (sId) => { if (!/(^\d{17}(\d|X|x)$)/.test(sId)) { return { data: "你输入的身份证长度或格式有误", state: false }; } //身份证城市 var aCity = { 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: "国外" }; if (!aCity[parseInt(sId.substr(0, 2))]) { return { data: "你的身份证地区有误", state: false }; } // 出生日期验证 var sBirthday = ( sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2)) ).replace(/-/g, "/"), d = new Date(sBirthday); if ( sBirthday != d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate() ) { return { data: "身份证上的出生日期有误", state: false }; } // 身份证号码校验 var sum = 0, weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], codes = "10X98765432"; for (var i = 0; i < sId.length - 1; i++) { sum += sId[i] * weights[i]; } var last = codes[sum % 11]; //计算出来的最后一位身份证号码 if (sId[sId.length - 1] != last) { return { data: "你输入的身份证号长度或格式有误", state: false }; } return { data: "", state: true }; }; //手机号校验 const isPhone = phone => { if (!/^1[3-9]\d{9}$/.test(phone)) { return { data: "手机号只能由11位数字组成", state: false }; } else { return { data: "", state: true }; } }; // 获取日期时间 const getDate = data => { var date = new Date(); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? "0" + m : m; var d = date.getDate(); d = d < 10 ? "0" + d : d; var h = date.getHours(); h = h < 10 ? "0" + h : h; var minute = date.getMinutes(); minute = minute < 10 ? "0" + minute : minute; var second = date.getSeconds(); second = second < 10 ? "0" + second : second; return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second; } const getQRCodeUrl = (content, isShow = true) => { return new Promise((resolve, reject) => { QRCode.toString(content, { type: 'png', }, function (err, url) { let str = (isShow ? 'data:image/svg+xml;base64,' : '') + Buffer(url).toString('base64'); if (err) { reject(err) } resolve(str) }); }) } //获得对应时间格式 const formatTime = (time, type) => { var date = new Date(time) var format = type || 'YYYY-MM-DD HH:NN:SS'; const year = date.getFullYear(); const month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1; const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); const hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(); const minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); const second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds(); format.indexOf('YYYY') > -1 ? format = format.replace('YYYY', year) : ''; format.indexOf('MM') > -1 ? format = format.replace('MM', month) : ''; format.indexOf('DD') > -1 ? format = format.replace('DD', day) : ''; format.indexOf('HH') > -1 ? format = format.replace('HH', hour) : ''; format.indexOf('NN') > -1 ? format = format.replace('NN', minute) : ''; format.indexOf('SS') > -1 ? format = format.replace('SS', second) : ''; return format; } // 重复请求 const repeatedRequest = (url, params, times) => { return new Promise(async (resolve, reject) => { while (times--) { try { const res = await visitorRecords(url, params); resolve(res); break; } catch (error) { if (times <= 0) { reject(error); } } } }); } // 获取地址?后的参数 const getForm = (url) => { var theForm = new Object(); if (url.indexOf("?") != -1) { url = url.split('?')[1] var str = url.substr(1); let strs = str.split("&"); for (var i = 0; i < strs.length; i++) { theForm[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]); } } return theForm; } const getWaterDrop = () => { const innerAudioContext = my.createInnerAudioContext(); innerAudioContext.autoplay = true; innerAudioContext.src = 'XNjM3NjQ1MDAwOA=='; innerAudioContext.play(); } function desensitization(val = "", start, end) { var star = ''; var string = String(val); function makeStar(number) { if (number > 0) { star += '*'; return makeStar(--number); } else { return star; } }; return string.substring(0, start) + makeStar(end - start) + string.substring(end); } function throttle(func, delay) { let lastCall = 0; return function (...args) { const now = new Date().getTime(); if (now - lastCall >= delay) { lastCall = now; func.apply(this, args); } }; } function debounce(func, delay) { let timeoutId; return function (...args) { const context = this; clearTimeout(timeoutId); timeoutId = setTimeout(() => { func.apply(context, args); }, delay); }; } module.exports = { isCardID: isCardID, isPhone: isPhone, getDate: getDate, getQRCodeUrl: getQRCodeUrl, formatTime: formatTime, repeatedRequest: repeatedRequest, getForm: getForm, getWaterDrop: getWaterDrop, desensitization: desensitization, throttle: throttle, debounce: debounce };