package desensitized import ( "bytes" "regexp" "strings" ) type Desensitized struct { } // DefaultDesensitized 默认:匹配 手机号,邮箱,中文,身份证 等进行脱敏处理 func (d Desensitized) DefaultDesensitized(str string) (result string) { var buffer bytes.Buffer if str == "" { return "***" } if strings.Contains(str, "@") { // 邮箱 res := strings.Split(str, "@") if len(res[0]) < 3 { resString := "***" buffer.WriteString(resString) buffer.WriteString("@") buffer.WriteString(res[1]) result = buffer.String() } else { res2 := d.subStr(str, 0, 3) resString := res2 + "***" buffer.WriteString(resString) buffer.WriteString("@") buffer.WriteString(res[1]) result = buffer.String() } return result } else { reg := `^1[0-9]\d{9}$` rgx := regexp.MustCompile(reg) mobileMatch := rgx.MatchString(str) if mobileMatch { // 手机号 buffer.WriteString(d.subStr(str, 0, 3)) buffer.WriteString("****") buffer.WriteString(d.subStr(str, 7, 11)) result = buffer.String() } else { nameRune := []rune(str) lens := len(nameRune) if lens <= 1 { result = "***" } else if lens == 2 { buffer.WriteString(string(nameRune[:1])) buffer.WriteString("*") result = buffer.String() } else if lens == 3 { buffer.WriteString(string(nameRune[:1])) buffer.WriteString("*") buffer.WriteString(string(nameRune[2:3])) result = buffer.String() } else if lens == 4 { buffer.WriteString(string(nameRune[:1])) buffer.WriteString("**") buffer.WriteString(string(nameRune[lens-1 : lens])) result = buffer.String() } else if lens == 18 { buffer.WriteString(string(nameRune[:4])) buffer.WriteString("**********") buffer.WriteString(string(nameRune[lens-4 : lens])) result = buffer.String() } else { i := lens / 3 buffer.WriteString(string(nameRune[:i])) buffer.WriteString(strings.Repeat("*", i)) buffer.WriteString(d.subStr(str, i*2, len(str))) result = buffer.String() } } return } } // CustomizeHash 自定义机密部分 func (Desensitized) subStr(str string, start int, end int) string { rs := []rune(str) return string(rs[start:end]) } // CustomizeHash @param 需要脱敏的字符串 //@param start 需要隐藏开始的位置 //@param end 需要隐藏结束的位置 //自定义脱敏方法 func (d Desensitized) CustomizeHash(str string, start int, end int) string { return d.subStr(str, 0, start) + strings.Repeat("*", end-start) + d.subStr(str, end, len(str)) }