news 2026/5/27 3:51:05

go语言对phone脱敏显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go语言对phone脱敏显示

在Go语言中实现手机号脱敏显示主要有以下几种方式,从简单到完整逐步推荐:

一、基础实现(字符串切片)

最常用且高效的方式是直接使用字符串切片操作,保留前3位和后4位,中间用*替换:

go

复制

package main import "fmt" // DesensitizePhone 手机号脱敏(基础版) func DesensitizePhone(phone string) string { // 检查长度是否为11位 if len(phone) != 11 { return phone } // 13812345678 -> 138****5678 return phone[:3] + "****" + phone[7:] } func main() { phone := "13812345678" fmt.Println("原始:", phone) // 原始: 13812345678 fmt.Println("脱敏后:", DesensitizePhone(phone)) // 脱敏后: 138****5678 }

二、增强实现(正则验证)

增加手机号格式验证,确保只有合法手机号才被脱敏:

go

复制

package main import ( "fmt" "regexp" ) // DesensitizePhoneRegex 手机号脱敏(带正则验证) func DesensitizePhoneRegex(phone string) string { // 验证手机号格式:1开头,第二位3-9,总长度11位 if matched, _ := regexp.MatchString(`^1[3-9]\d{9}$`, phone); matched { return phone[:3] + "****" + phone[7:] } return phone // 格式不匹配则原样返回 } func main() { fmt.Println(DesensitizePhoneRegex("13812345678")) // 138****5678 fmt.Println(DesensitizePhoneRegex("12345678901")) // 12345678901 (不处理) }

三、使用第三方脱敏库

如果需要统一处理多种敏感信息(身份证、邮箱、姓名等),推荐使用desensitization库:

bash

复制

go get github.com/wu-songg/desensitization-spring-boot-starter

go

复制

import ( "fmt" "pf_util" // 脱敏工具包 ) func main() { d := pf_util.DesensitizedUtil{} // 4 表示 MobilePhone 类型 result := d.SetType(4).Desensitized("13812345678") fmt.Println(result) // 138****5678 // 自定义脱敏规则(类型, 内容, 脱敏长度, 位置) custom := d.Method("mobile", "13812345678", 4, 3) // 从第3位开始脱敏4位 fmt.Println(custom) // 138****5678 }

四、完整生产环境方案

结合正则匹配和灵活处理,支持多种场景:

go

复制

package main import ( "fmt" "regexp" "unicode/utf8" ) // HidePhone 通用脱敏函数 func HidePhone(str string) string { if str == "" { return "***" } // 手机号正则 reg := `^1[3-9]\d{9}$` rgx := regexp.MustCompile(reg) if rgx.MatchString(str) { // 手机号:13812345678 -> 138****5678 return str[:3] + "****" + str[7:] } // 处理其他类型(如座机、国际号码等) // 可根据需求扩展 return str } // SafeSubstring 安全截取字符串(支持中文) func SafeSubstring(s string, start, end int) string { runes := []rune(s) if start >= len(runes) || end > len(runes) || start > end { return s } return string(runes[start:end]) } func main() { // 测试用例 testCases := []string{ "13812345678", // 标准手机号 "12345678901", // 非法手机号 "8613812345678", // 带区号 } for _, phone := range testCases { fmt.Printf("原始: %s -> 脱敏: %s\n", phone, HidePhone(phone)) } }

五、性能建议

  1. 优先使用字符串操作:直接切片比正则性能高10倍以上,适用于简单场景

  2. 预编译正则:如果需要验证,将regexp.MustCompile放在全局变量,避免重复编译

  3. 并发安全:以上方法都是无状态的,可在并发环境直接使用

六、单元测试

go

复制

func TestDesensitizePhone(t *testing.T) { tests := []struct { input string expected string }{ {"13812345678", "138****5678"}, {"12345678901", "12345678901"}, // 非法手机号不处理 {"1381234567", "1381234567"}, // 长度不足不处理 {"", "***"}, } for _, tt := range tests { result := HidePhone(tt.input) if result != tt.expected { t.Errorf("输入 %s,期望 %s,实际 %s", tt.input, tt.expected, result) } } }

总结

  • 简单场景直接用字符串切片方案

  • 需要验证格式用正则增强方案

  • 企业级项目建议用第三方库统一处理多种敏感信息

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 20:48:10

这份无线联网智能门锁系统清单非常专业,清晰地勾勒出了一套适用于多业态、高流动性、强管理场景的现代化出入口解决方案。这不仅是设备清单,更是一套“去中心化部署、云端化管理”的智慧运营蓝图。

无线联网智能门锁系统——专为公寓、办公、宿舍、民宿与酒店打造的全场景智能门禁解决方案这套无线联网智能门锁系统,专为高流动性、多权限管理的场景设计,已广泛应用于公寓、企业宿舍、办公场所、民宿及酒店等环境,实现“一卡通行、远程管控…

作者头像 李华
网站建设 2026/5/19 2:24:02

动漫生成服务SLA保障:AnimeGANv2高可用部署架构

动漫生成服务SLA保障:AnimeGANv2高可用部署架构 1. 引言 1.1 业务场景描述 随着AI图像风格迁移技术的普及,用户对“照片转动漫”类应用的需求迅速增长。尤其在社交娱乐、头像生成、内容创作等领域,基于AnimeGANv2的二次元转换服务因其画风…

作者头像 李华
网站建设 2026/5/12 18:50:06

避坑指南:通义千问2.5-7B-Instruct本地部署常见问题解决

避坑指南:通义千问2.5-7B-Instruct本地部署常见问题解决 1. 引言 1.1 业务场景描述 随着大模型在企业级应用和开发者项目中的普及,越来越多团队选择将高性能、可商用的开源模型部署至本地环境,以实现数据隐私保护、低延迟响应和定制化功能…

作者头像 李华
网站建设 2026/5/15 21:53:51

AnimeGANv2与Stable Diffusion对比:谁更适合二次元转换?

AnimeGANv2与Stable Diffusion对比:谁更适合二次元转换? 1. 背景与需求分析 随着AI生成技术的快速发展,将真实照片转换为二次元动漫风格已成为图像生成领域的重要应用场景。无论是用于社交头像生成、虚拟角色设计,还是艺术创作辅…

作者头像 李华
网站建设 2026/5/12 2:09:40

Keil环境下51单片机流水灯代码生成操作指南

从零开始点亮第一盏灯:Keil环境下51单片机流水灯实战全记录还记得你第一次看到LED闪烁时的兴奋吗?那种“我写的代码真的在控制物理世界”的震撼感,是每个嵌入式工程师都无法忘记的起点。今天,我们就从最经典的项目——流水灯入手&…

作者头像 李华
网站建设 2026/5/24 22:13:41

后端接入大模型实现“自然语言查数据库”

一、场景背景 后端开发中,经常遇到业务方/用户想用自然语言(如“查最近30天热销产品”)查询数据库的需求。传统方案需硬编码SQL分支,维护成本高,而通过大模型将自然语言转SQL(NL2SQL)&#xff0…

作者头像 李华