package utils import ( "regexp" "strings" ) // MaskPhone 脱敏手机号 func MaskPhone(phone string) string { if len(phone) != 11 { return phone // 如果不是标准手机号格式,直接返回 } // 保留前3位和后4位,中间4位用*代替 return phone[:3] + "****" + phone[7:] } // MaskIDCard 脱敏身份证号 func MaskIDCard(idCard string) string { if len(idCard) != 18 { return idCard // 如果不是标准身份证格式,直接返回 } // 保留前6位和后4位,中间8位用*代替 return idCard[:6] + "********" + idCard[14:] } // MaskEmail 脱敏邮箱 func MaskEmail(email string) string { emailParts := strings.Split(email, "@") if len(emailParts) != 2 { return email // 不是标准邮箱格式,直接返回 } localPart := emailParts[0] if len(localPart) <= 2 { return "*" + "@" + emailParts[1] } // 保留前1位,其余用*代替,但不超过3个* maskLen := len(localPart) - 1 if maskLen > 3 { maskLen = 3 } return localPart[0:1] + strings.Repeat("*", maskLen) + "@" + emailParts[1] } // MaskName 脱敏姓名(保留姓氏) func MaskName(name string) string { if len(name) == 0 { return name } // 对于中文姓名,保留第一个字符 if len(name) == 2 { return name[:1] + "*" } else if len(name) > 2 { return name[:1] + "**" } // 对于其他情况,直接返回 return name } // MaskBankCard 脱敏银行卡号 func MaskBankCard(card string) string { // 移除空格 card = strings.ReplaceAll(card, " ", "") if len(card) < 8 { return card } // 保留前4位和后4位 prefix := card[:4] suffix := card[len(card)-4:] return prefix + " **** **** " + suffix } // MaskAddress 脱敏地址信息 func MaskAddress(address string) string { if len(address) <= 6 { return "***" } // 保留前6个字符 return address[:6] + "***" } // MaskID 脱敏ID(如果是身份证号格式则调用MaskIDCard) func MaskID(id string) string { // 检查是否为身份证号格式 matched, _ := regexp.MatchString(`^\d{17}[\dXx]$`, id) if matched { return MaskIDCard(id) } return id }