C#隐藏手机号、邮箱等敏感信息的实现方法
Intro
做项目的时候,页面上有一些敏感信息,需要用“*”隐藏一些比较重要的信息,于是打算写一个通用的方法。
Let's do it !
Method 1:指定左右字符数量
Method 1.1 中间的*的个数和实际长度有关
/// <summary> /// 隐藏敏感信息 /// </summary> /// <param name="info">信息实体</param> /// <param name="left">左边保留的字符数</param> /// <param name="right">右边保留的字符数</param> /// <param name="basedOnLeft">当长度异常时,是否显示左边 /// <code>true</code>显示左边,<code>false</code>显示右边 /// </param> /// <returns></returns> public static string HideSensitiveInfo(string info, int left, int right, bool basedOnLeft=true) { if (String.IsNullOrEmpty(info)) { return ""; } StringBuilder sbText = new StringBuilder(); int hiddenCharCount = info.Length - left - right; if (hiddenCharCount > 0) { string prefix = info.Substring(0, left), suffix = info.Substring(info.Length - right); sbText.Append(prefix); for (int i = 0; i < hiddenCharCount; i++) { sbText.Append("*"); } sbText.Append(suffix); } else { if (basedOnLeft) { if (info.Length > left && left > 0) { sbText.Append(info.Substring(0, left) + "****"); } else { sbText.Append(info.Substring(0, 1) + "****"); } } else { if (info.Length > right && right > 0) { sbText.Append("****" + info.Substring(info.Length - right)); } else { sbText.Append("****" + info.Substring(info.Length - 1)); } } } return sbText.ToString(); }
Method 1.2 : 中间的*的个数固定
/// <summary> /// 隐藏敏感信息 /// </summary> /// <param name="info">信息实体</param> /// <param name="left">左边保留的字符数</param> /// <param name="right">右边保留的字符数</param> /// <param name="basedOnLeft">当长度异常时,是否显示左边 /// <code>true</code>显示左边,<code>false</code>显示右边 /// <returns></returns> public static string HideSensitiveInfo1(string info, int left, int right, bool basedOnLeft = true) { if (String.IsNullOrEmpty(info)) { return ""; } StringBuilder sbText = new StringBuilder(); int hiddenCharCount = info.Length - left - right; if (hiddenCharCount > 0) { string prefix = info.Substring(0, left), suffix = info.Substring(info.Length - right); sbText.Append(prefix); sbText.Append("****"); sbText.Append(suffix); } else { if (basedOnLeft) { if (info.Length > left && left >0) { sbText.Append(info.Substring(0, left) + "****"); } else { sbText.Append(info.Substring(0, 1) + "****"); } } else { if (info.Length > right && right>0) { sbText.Append("****" + info.Substring(info.Length - right)); } else { sbText.Append("****" + info.Substring(info.Length - 1)); } } } return sbText.ToString(); }
Method 2 : “*”数量一定,设置为4个,按信息总长度的比例来取,默认左右各取1/3
/// <summary> /// 隐藏敏感信息 /// </summary> /// <param name="info">信息</param> /// <param name="sublen">信息总长与左子串(或右子串)的比例</param> /// <param name="basedOnLeft">当长度异常时,是否显示左边,默认true,默认显示左边 /// <code>true</code>显示左边,<code>false</code>显示右边 /// <returns></returns> public static string HideSensitiveInfo(string info,int sublen = 3,bool basedOnLeft = true) { if (String.IsNullOrEmpty(info)) { return ""; } if (sublen<=1) { sublen = 3; } int subLength = info.Length / sublen; if (subLength > 0 && info.Length > (subLength*2) ) { string prefix = info.Substring(0, subLength), suffix = info.Substring(info.Length - subLength); return prefix + "****" + suffix; } else { if (basedOnLeft) { string prefix = subLength > 0 ? info.Substring(0, subLength) : info.Substring(0, 1); return prefix + "****"; } else { string suffix = subLength > 0 ? info.Substring(info.Length-subLength) : info.Substring(info.Length-1); return "****"+suffix; } } }
扩展
手机号 1
/// <summary> /// 隐藏手机号详情 /// </summary> /// <param name="phone">手机号</param> /// <param name="left">左边保留字符数</param> /// <param name="right">右边保留字符数</param> /// <returns></returns> public static string HideTelDetails(string phone, int left = 3, int right = 4) { return HideSensitiveInfo(phone, left, right); }
测试结果如下:
手机号 2
/// <summary> /// 隐藏手机号详情 /// </summary> /// <param name="phone">手机号</param> /// <param name="left">左边保留字符数</param> /// <param name="right">右边保留字符数</param> /// <returns></returns> public static string HideTelDetails(string phone, int left = 3, int right = 4) { return HideSensitiveInfo1(phone, left, right); }
测试结果如下:
邮件地址
/// <summary> /// 隐藏右键详情 /// </summary> /// <param name="email">邮件地址</param> /// <param name="left">邮件头保留字符个数,默认值设置为3</param> /// <returns></returns> public static string HideEmailDetails(string email, int left = 3) { if (String.IsNullOrEmpty(email)) { return ""; } if (System.Text.RegularExpressions.Regex.IsMatch(email, @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))//如果是邮件地址 { int suffixLen =email.Length - email.LastIndexOf('@'); return HideSensitiveInfo(email, left, suffixLen,false); } else { return HideSensitiveInfo(email); } }
测试结果如下:
以上所述是小编给大家介绍的C#隐藏手机号、邮箱等敏感信息的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对我们网站的支持!
栏 目:C#教程
下一篇:C#中const 和 readonly 修饰符的用法详解
本文标题:C#隐藏手机号、邮箱等敏感信息的实现方法
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6266.html
您可能感兴趣的文章
- 01-10C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- 01-10C#禁止textbox复制、粘贴、剪切及鼠标右键的方法
- 01-10http图片上传安全性问题 根据ContentType (MIME) 判断其实不准确、不
- 01-10浅析JAVA中过滤器、监听器、拦截器的区别
- 01-10C#调用WebService实例开发
- 01-10C#编程自学之开篇介绍
- 01-10C#编程自学之数据类型和变量一
- 01-10C# WinForm快捷键设置技巧
- 01-10Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- 01-10轻松学习C#的运算符
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-10delphi制作wav文件的方法
- 04-02jquery与jsp,用jquery
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结