github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/pkg/helper/column-vaildator.go (about) 1 package helper 2 3 import ( 4 "regexp" 5 "strconv" 6 "strings" 7 "time" 8 ) 9 10 func IsMobilePhone(str string) (ret bool) { 11 regx := regexp.MustCompile(`^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`) 12 ret = regx.MatchString(str) 13 14 return 15 } 16 17 func IsTelPhone(str string) (ret bool) { 18 regx := regexp.MustCompile(`[0-9\-\(\)()]*[0-9]{4,}$`) 19 ret = regx.MatchString(str) 20 21 return 22 } 23 24 func IsIDCard(id string) bool { 25 id = strings.ToUpper(id) 26 if len(id) != 15 && len(id) != 18 { 27 return false 28 } 29 r := regexp.MustCompile("(\\d{15})|(\\d{17}([0-9]|X))") 30 if !r.MatchString(id) { 31 return false 32 } 33 if len(id) == 15 { 34 tm2, _ := time.Parse("01/02/2006", string([]byte(id)[8:10])+"/"+string([]byte(id)[10:12])+"/"+"19"+string([]byte(id)[6:8])) 35 if tm2.Unix() <= 0 { 36 return false 37 } 38 return true 39 } else { 40 tm2, _ := time.Parse("01/02/2006", string([]byte(id)[10:12])+"/"+string([]byte(id)[12:14])+"/"+string([]byte(id)[6:10])) 41 if tm2.Unix() <= 0 { 42 return false 43 } 44 // 检验18位身份证的校验码是否正确。 45 // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 46 arrInt := []int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2} 47 arrCh := []string{"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"} 48 sign := 0 49 for k, v := range arrInt { 50 intTemp, _ := strconv.Atoi(string([]byte(id)[k : k+1])) 51 sign += intTemp * v 52 } 53 n := sign % 11 54 valNum := arrCh[n] 55 if valNum != string([]byte(id)[17:18]) { 56 return false 57 } 58 return true 59 } 60 }