//身份证号校验
const isCardID = sId => {
  if (!/(^\d{15}$)|(^\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 isCornet = sId => {
  if (!/^(?!.*-.*-)[-\d]{3,11}$/.test(sId)) {
    return {
      data: "长度或格式有误",
      state: false
    };
  } else {
    return {
      data: "",
      state: true
    };
  }
};

//获得对应时间格式
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;
};

//获取url参数组成json
const GetQueryJson = e => {
  if (e == "undefined") {
    return {};
  } else {
    let url = e; //获取url
    let arr = []; //存储参数的数
    let res = {}; //存储最终JSON结果对象
    arr = url.split("?")[1].split("&"); //获取浏览器地址栏中的参数
    for (let i = 0; i < arr.length; i++) {
      //遍历参数
      if (arr[i].indexOf("=") != -1) {
        //如果参数中有值
        let str = arr[i].split("=");
        res[str[0]] = str[1];
      } else {
        //如果参数中无值
        res[arr[i]] = "";
      }
    }
    return res;
  }
};
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,
  formatTime: formatTime,
  GetQueryJson: GetQueryJson,
  isCornet,
  debounce: debounce,
};
