package tool

import (
	"regexp"
	"strconv"
	"strings"
)

// CheckMobile 检验手机号
func CheckMobile(phone string) bool {
	// 匹配规则
	// ^1第一位为一
	// [345789]{1} 后接一位345789 的数字
	// \\d \d的转义 表示数字 {9} 接9位
	// $ 结束符
	// regRuler := `^\+\d{2}1[3456789]\d{9}$`

	regRuler := "^1[34567890]{1}\\d{9}$"

	// 正则调用规则
	reg := regexp.MustCompile(regRuler)

	// 返回 MatchString 是否匹配
	return reg.MatchString(phone)

}

// 有数字
func HasNum(S string) bool {
	regRuler := "[0-9]+"
	reg := regexp.MustCompile(regRuler)

	// 返回 MatchString 是否匹配
	return reg.MatchString(S)
}

func HasAbc(S string) bool {
	regRuler := "[a-zA-Z]+"
	reg := regexp.MustCompile(regRuler)

	// 返回 MatchString 是否匹配
	return reg.MatchString(S)
}

// HideStar 隐藏手机号码
func HideStar(str string) (result string) {
	if strings.Contains(str, "@") { // 邮箱
		result = "0"
	} else if len(str) > 6 {
		strStart := str[0:4]
		strEnd := str[len(str)-4:]
		result = strStart + "****" + strEnd
	}

	return result

}

// WildcardEscape 通配符转换
func WildcardEscape(str string) string {
	convStrs := []string{"[", "_", "%"}
	for _, s := range convStrs {
		str = strings.ReplaceAll(str, s, "\\"+s)
	}

	return str
}

// 验证身份证号码是否正确
func VerificatIdcart(str string) bool {
	iArr := []int64{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
	var temp int64
	for i, v := range iArr {
		x, _ := strconv.ParseInt(string(str[i]), 10, 64)
		temp = temp + (x * v)
	}
	flag := temp % 11
	drr := []string{"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}
	if string(str[17]) == drr[flag] {
		return true
	}
	return false
}
