对用户的姓名、电话号码、邮箱、身份证等信息进行脱敏处理。
import (
"regexp"
"strings"
)
// 匹配 手机号,邮箱,中文,身份证等等 进行脱敏处理
func HideStar(str string) (result string) {
if str == "" {
return "***"
}
if strings.Contains(str, "@") {
// 邮箱
res := strings.Split(str, "@")
if len(res[0]) < 3 {
resString := "***"
result = resString + "@" + res[1]
} else {
res2 := Substr2(str, 0, 3)
resString := res2 + "***"
result = resString + "@" + res[1]
}
return result
} else {
reg := `^1[0-9]\d{9}$`
rgx := regexp.MustCompile(reg)
mobileMatch := rgx.MatchString(str)
if mobileMatch {
// 手机号
result = Substr2(str, 0, 3) + "****" + Substr2(str, 7, 11)
} else {
nameRune := []rune(str)
lens := len(nameRune)
if lens <= 1 {
result = "***"
} else if lens == 2 {
result = string(nameRune[:1]) + "*"
} else if lens == 3 {
result = string(nameRune[:1]) + "*" + string(nameRune[2:3])
} else if lens == 4 {
result = string(nameRune[:1]) + "**" + string(nameRune[lens-1:lens])
} else if lens > 4 {
result = string(nameRune[:2]) + "***" + string(nameRune[lens-2:lens])
}
}
return
}
}
func Substr2(str string, start int, end int) string {
rs := []rune(str)
return string(rs[start:end])
}
测试代码
import (
"fmt"
"testing"
)
// 脱敏测试
func TestStar(t *testing.T) {
// 邮箱
result := HideStar("1511X2456@qq.com") // 151***@qq.com
fmt.Println(result)
// 电话号码
result = HideStar("13077881053") // 130****1053
fmt.Println(result)
// 身份证
result = HideStar("362201200005302565") // 36***15
fmt.Println(result)
// 姓名
result = HideStar("小叮当") // 小*当
fmt.Println(result)
}
关注微信公众号:【皮卡战记】
