class FormUtilService {
  /**
   * @description: 身份证自定义校验
   * @author luxiaomeng
   * @date 2021/8/31 14:22
   */
  idnumValidator: any = (rule: any, value: any, callback: any) => {
    //身份证城市
    const aCity: any = {
      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: "国外",
    };
    const sBirthday = (value.substr(6, 4) + "-" + Number(value.substr(10, 2)) + "-" + Number(value.substr(12, 2))).replace(/-/g, "/"),
      d = new Date(sBirthday);
    let sum = 0;
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const codes = "10X98765432";
    for (let i = 0; i < value.length - 1; i++) {
      sum += value[i] * weights[i];
    }
    const last = codes[sum % 11]; //计算出来的最后一位身份证号码
    if (!value) {
      return callback();
    } else {
      if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(value)) {
        callback("你输入的身份证长度或格式错误");
      } else if (!aCity[parseInt(value.substr(0, 2))]) {
        callback("你的身份证地区非法");
      } else if (sBirthday != d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()) {
        callback("身份证上的出生日期非法");
      } else if (value[value.length - 1] != last) {
        callback("你输入的身份证号非法");
      } else {
        return callback();
      }
    }
  };
  /**
   * @Description: 日期格式化
   * @author zpfly
   * @datetime 2021/5/6 11:25
   */
  formatDate(date: Date, format?: string): string {
    format = format || "YYYY-MM-dd";
    const pad = (n: number): string => (n < 10 ? `0${n}` : n.toString());
    return format
      .replace("YYYY", date.getFullYear().toString())
      .replace("MM", pad(date.getMonth() + 1))
      .replace("dd", pad(date.getDate()))
      .replace("DD", pad(date.getDate()))
      .replace("HH", pad(date.getHours()))
      .replace("mm", pad(date.getMinutes()))
      .replace("ss", pad(date.getSeconds()));
  }
}
const formUtilService: FormUtilService = new FormUtilService();
export { formUtilService };