67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package utils
|
|
|
|
import (
|
|
"regexp"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
// MaskNameStr 用户名掩码
|
|
func MaskNameStr(str string, maskType int) string {
|
|
if str == "" {
|
|
return str
|
|
}
|
|
|
|
// 使用正则表达式判断是否包含中文字符
|
|
chinesePattern := "[\u4e00-\u9fa5]+"
|
|
isChinese, _ := regexp.MatchString(chinesePattern, str)
|
|
|
|
// 使用正则表达式判断是否包含英文字母
|
|
englishPattern := "[A-Za-z]+"
|
|
isEnglish, _ := regexp.MatchString(englishPattern, str)
|
|
|
|
// 判断是否包含中文字符
|
|
if isChinese {
|
|
// 按照中文字符计算长度
|
|
strLen := utf8.RuneCountInString(str)
|
|
|
|
if strLen >= 3 {
|
|
if maskType == 1 {
|
|
// 三个字符或三个字符以上掐头取尾,中间用*代替
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
lastChar, _ := utf8.DecodeLastRuneInString(str)
|
|
str = string(firstChar) + "*" + string(lastChar)
|
|
} else {
|
|
// 首字母保留,后两位用*代替
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
str = string(firstChar) + "**"
|
|
}
|
|
} else if strLen == 2 {
|
|
// 两个字符
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
str = string(firstChar) + "*"
|
|
}
|
|
} else if isEnglish {
|
|
// 按照英文字串计算长度
|
|
strLen := utf8.RuneCountInString(str)
|
|
|
|
if strLen >= 3 {
|
|
if maskType == 1 {
|
|
// 三个字符或三个字符以上掐头取尾,中间用*代替
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
lastChar, _ := utf8.DecodeLastRuneInString(str)
|
|
str = string(firstChar) + "*" + string(lastChar)
|
|
} else {
|
|
// 首字母保留,后两位用*代替
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
str = string(firstChar) + "**"
|
|
}
|
|
} else if strLen == 2 {
|
|
// 两个字符
|
|
firstChar, _ := utf8.DecodeRuneInString(str)
|
|
str = string(firstChar) + "*"
|
|
}
|
|
}
|
|
|
|
return str
|
|
}
|