竹影横扫窗

导航

 

    项目开发中,基于对用户隐私保护的考虑,需要对敏感信息进行加密显示,使用特殊字符代替字符中间字符。如手机号,身份证号,姓名等,以下为隐藏字符串的实现:


/// <summary>
/// 将传入的字符串中间部分字符替换成特殊字符.
/// </summary>
/// <param name="number">要替换的字符串</param>
/// <param name="startLen">前保留长度</param>
/// <param name="endLen">尾部保留长度</param>
/// <param name="replaceChar">替换的特殊字符</param>
/// <returns></returns>

public static string HideString(string number, int startLen, int endLen, char replaceChar = '*')
        {
            try
            {
                if (string.IsNullOrWhiteSpace(number))
                {
                    number = string.Empty;
                }
                else
                {
                    int length = number.Length - startLen - endLen;
                    string replaceStr = number.Substring(startLen, length);
                    string specialStr = string.Empty;
                    for (int i = 0; i < replaceStr.Length; i++)
                    {
                        specialStr += replaceChar;
                    }

                    number = number.Replace(replaceStr, specialStr);
                }
            }
            catch (Exception e)
            {
                throw;
            }

            return number;
        }

上述方法如果输入字符串为“11111111”或者不进行替换时,程序会出错。改进程序如下:

public static string HideString(string str, int startLen, int endLen, char replaceChar = '*')
        {
            if (string.IsNullOrWhiteSpace(str))
            {
                return string.Empty;
            }

            try
            {
                int length = str.Length - startLen - endLen;
                var startStr = str.Substring(0, startLen);
                var endStr = str.Substring(str.Length - endLen, endLen);
                var hideStr = string.Empty.PadLeft(length, replaceChar);

                return $"{startStr}{hideStr}{endStr}";
            }
            catch (Exception ex)
            {
                NLogManager.LogWarn(ex);
                return string.Empty;
            }
        }

 

 

隐藏手机号方式二:

public static string HidePhone(string phone)
        {
            if (string.IsNullOrWhiteSpace(phone))
            {
                return string.Empty;
            }

            if (phone.Length == 11)
            {
                return $"{phone.Substring(0, 3)}****{phone.Substring(7, 4)}";
            }

            int hideLength = (int)Math.Floor((double)phone.Length / 2);
            int displayLength = phone.Length - hideLength;
            int displayHalfLength = (int)Math.Floor((double)displayLength / 2);
            int prefixLength = displayHalfLength;
            int suffixLength = displayLength - prefixLength;
            return $"{phone.Substring(0, displayHalfLength).PadRight(prefixLength + hideLength, '*')}{phone.Substring(phone.Length - suffixLength, suffixLength)}";
        }

 

posted on 2020-02-13 14:29  竹影横扫窗  阅读(2587)  评论(0编辑  收藏  举报