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

总结

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通义千问2.5-7B-Instruct优化技巧:RTX 3060流畅运行指南

通义千问2.5-7B-Instruct优化技巧:RTX 3060流畅运行指南 1. 引言:为何在RTX 3060上部署Qwen2.5-7B-Instruct成为可能 随着大模型技术的快速演进,70亿参数级别的语言模型已逐步从“云端专属”走向本地化部署。通义千问2.5-7B-Instruct作为阿…

农业机械收割机拖拉机数据集6340张VOC+YOLO格式

农业机械收割机拖拉机数据集6340张VOCYOLO格式数据集格式:VOC格式YOLO格式压缩包内含:3个文件夹,分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计:6340Annotations文件夹中xml文件总计:6340labels文件夹中tx…

AnimeGANv2如何提高边缘清晰度?后处理滤波技术实战

AnimeGANv2如何提高边缘清晰度?后处理滤波技术实战 1. 背景与问题分析 在基于AnimeGANv2的图像风格迁移应用中,尽管模型本身具备较强的动漫化能力,尤其在人脸保留和色彩渲染方面表现优异,但其生成结果常存在边缘模糊、轮廓失真、…

开源模型新选择:AnimeGANv2宫崎骏风格迁移实战指南

开源模型新选择:AnimeGANv2宫崎骏风格迁移实战指南 1. 引言 随着深度学习在图像生成领域的持续突破,风格迁移技术已从实验室走向大众应用。其中,AnimeGANv2 作为轻量级、高效率的动漫风格迁移模型,凭借其出色的画质表现和极低的…

AnimeGANv2优化指南:处理高分辨率图片的配置建议

AnimeGANv2优化指南:处理高分辨率图片的配置建议 1. 背景与挑战:高分辨率输入下的性能瓶颈 随着用户对图像质量要求的不断提升,将高清照片(如1080p、4K)转换为二次元风格的需求日益增长。AnimeGANv2 以其轻量级结构和…

keil5安装包下载通俗解释:新手也能轻松掌握

从零开始搭建嵌入式开发环境:Keil5安装与配置实战指南 你是不是也曾在搜索引擎里输入“ keil5安装包下载 ”,却被五花八门的链接、版本号和破解教程搞得一头雾水? 别担心,这不只是你在经历。几乎每一个刚接触STM32或ARM开发的…

车辆及人数据集(汽车公交车收割机拖拉机卡车人)12819张

车辆及人数据集(汽车公交车收割机拖拉机卡车人)12819张数据集格式:VOC格式YOLO格式压缩包内含:3个文件夹,分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计:12819Annotations文件夹中xml文件总计&…

Qt 线程管理:从 QThread 到 QThreadPool

在 Qt 中,多线程开发主要围绕 QThread(底层控制)和 QThreadPool(效率复用)展开。QThread:手动管理线程生命周期,适用于常驻后台任务。QThreadPool:自动管理线程池,适用于…

AnimeGANv2从零开始:构建二次元转换器完整流程

AnimeGANv2从零开始:构建二次元转换器完整流程 1. 引言 1.1 学习目标 本文将带你从零开始,完整实现一个基于 AnimeGANv2 的照片转二次元动漫风格系统。你将掌握: AnimeGANv2 的核心原理与轻量化设计优势如何部署并运行一个支持人脸优化的…

物理约束机器学习赋能科学计算

物理约束机器学习赋能科学计算 研究人员从有限体积法中汲取灵感,并调整神经算子,以在物理系统的深度学习模型中强制执行守恒定律和边界条件。 深度学习方法在科学计算领域也展现出前景,可用于预测偏微分方程的解。这些方程通常数值求解成本高…

彻底解析Java访问修饰符:public、private、protected及默认的区别

文章目录彻底解析 Java 访问修饰符:public、private、protected 及默认的区别?什么是访问修饰符?第一部分:public(公共的)public 的作用范围public 的应用场景示例代码第二部分:private&#xf…

AnimeGANv2代码实例:Python调用模型避坑指南

AnimeGANv2代码实例:Python调用模型避坑指南 1. 引言 1.1 项目背景与技术价值 随着深度学习在图像生成领域的快速发展,风格迁移(Style Transfer)技术已从早期的神经网络艺术化处理演进到如今高度精细化的动漫风格转换。其中&am…

一键部署通义千问2.5-7B-Instruct,AI应用开发从未如此简单

一键部署通义千问2.5-7B-Instruct,AI应用开发从未如此简单 1. 引言:为什么选择通义千问2.5-7B-Instruct? 随着大模型技术的快速演进,开发者对高效、轻量且可商用的本地化推理模型需求日益增长。在这一背景下,通义千问…

手把手教程:用通义千问2.5-7B和vLLM实现代码补全功能

手把手教程:用通义千问2.5-7B和vLLM实现代码补全功能 1. 学习目标与前置知识 本文将带领读者从零开始,使用 通义千问2.5-7B-Instruct 模型结合 vLLM 推理框架,搭建一个高效的本地化代码补全系统。通过本教程,您将掌握&#xff1…

Windows 10/11 优化大师 Windows Manager

一、前言:为什么 Windows 10/11 越用越卡? 相信很多朋友都有这样的体验: 新装的 Windows 10 / Windows 11 用着很流畅用了一段时间后: 开机变慢系统反应迟钝后台服务越来越多磁盘空间被莫名其妙占满 即便你不安装乱七八糟的软…

hal_uart_transmit支持多协议切换的控制系统设计方案

基于hal_uart_transmit的多协议动态切换系统设计:从理论到实战在嵌入式控制系统中,我们常常面临一个看似简单却极具挑战的现实问题:如何让一块MCU通过同一个UART接口,与使用不同通信协议的多个外设稳定“对话”?比如&a…

AnimeGANv2实战:动漫风格社交媒体广告

AnimeGANv2实战:动漫风格社交媒体广告 1. 引言 随着人工智能技术在图像生成领域的不断突破,将现实世界的照片转化为具有艺术风格的数字作品已成为可能。其中,AnimeGANv2 作为专为“照片转二次元动漫”设计的轻量级生成对抗网络(…

access数据库损坏后的修复方法

access数据库是微软Office套件里的“轻量级”关系型数据库,特别适合个人或小团队处理结构化数据。它最大的优势是‌零代码上手‌——通过可视化操作就能完成数据管理,同时支持VBA编程实现复杂功能。“轻量级”“关系型”基本上把Access的应用场景和特征说…

QProcess调用外部程序

在桌面应用开发中,调用外部程序是绑定不开的需求:执行系统命令、调用 FFmpeg 转码、启动 Git 操作……很多开发者习惯用 system("command") 一行解决,却不知道这种写法会阻塞整个线程,让 GUI 界面卡成 PPT。 Qt 提供的…

VibeThinker-1.5B值得部署吗?数学与编程双项评测教程

VibeThinker-1.5B值得部署吗?数学与编程双项评测教程 1. 引言:小参数模型的推理新星 随着大模型训练成本不断攀升,业界对高效、低成本的小参数模型关注度日益提升。微博开源的 VibeThinker-1.5B 正是在这一背景下诞生的一款实验性但极具潜力…