12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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))
- }
|