首页 > 编程 > C# > 正文

C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

2019-10-29 21:39:26
字体:
来源:转载
供稿:网友
大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面这篇文章主要介绍C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的相关资料,需要的朋友可以参考下
 

大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面小编把代码整理如下:
 

  1. /// <summary> 
  2. /// 将传入的字符串中间部分字符替换成特殊字符 
  3. /// </summary> 
  4. /// <param name="value">需要替换的字符串</param> 
  5. /// <param name="startLen">前保留长度</param> 
  6. /// <param name="endLen">尾保留长度</param> 
  7. /// <param name="replaceChar">特殊字符</param> 
  8. /// <returns>被特殊字符替换的字符串</returns> 
  9. private static string ReplaceWithSpecialChar(string value, int startLen = 4, int endLen = 4, char specialChar = '*'
  10.  try 
  11.  { 
  12.   int lenth = value.Length - startLen - endLen; 
  13.   string replaceStr = value.Substring(startLen, lenth); 
  14.   string specialStr = string.Empty; 
  15.   for (int i = 0; i < replaceStr.Length; i++) 
  16.   { 
  17.    specialStr += specialChar; 
  18.   } 
  19.   value = value.Replace(replaceStr, specialStr); 
  20.  } 
  21.  catch (Exception) 
  22.  { 
  23.   throw
  24.  } 
  25.  return value; 
?

效果图展示如下:

 

复制代码代码如下:

ReplaceWithSpecialChar("柯小呆", 1, 0,'*') -->Result: 柯*呆
ReplaceWithSpecialChar("622212345678485") -->Result: 6222*******8485
ReplaceWithSpecialChar("622212345678485", 4 , 4 , '*') -->Result: 6222*******8485

 

注:如果传入的startLen/endLen 超过字符串长度,将抛出下标越界异常

C#实现参数隐私代码

?
  1. using System; 
  2. using System.Collections; 
  3. using System.ComponentModel; 
  4. using System.Drawing; 
  5. using System.Web; 
  6. using System.Web.SessionState; 
  7. using System.Web.UI; 
  8. using System.Web.UI.WebControls; 
  9. using System.Web.UI.HtmlControls; 
  10. using System.IO; 
  11. using System.Text; 
  12. using System.Text.RegularExpressions; 
  13. using System.Data.SqlClient; 
  14. using System.Configuration; 
  15. //导入自定义的类库 
  16. using _3Layer.DataLayer.DataCommon; 
  17. using _3Layer.DataLayer.DataCommon.DataAccess; 
  18. using Library.ClassLibrary.Crypt.DES; 
  19. namespace CHONGCHONG.XML 
  20. public class RenderingXML : System.Web.UI.Page 
  21. /// <summary> 
  22. /// 从数据库预生成XML数据源 
  23. /// </summary> 
  24. private void PreRenderXML() 
  25. string strSQL = "select语句略去........................; 
  26. myDataLayer.Open(); 
  27. RenderingXml="<?xml version='1.0' 
  28. encoding='gb2312'?>/r/n"; 
  29. RenderingXml+="<xml>/r/n"
  30. try 
  31. {  
  32. System.Data.SqlClient.SqlDataReader myDR  
  33. = (SqlDataReader)myDataLayer.ExecuteReader( strSQL ); 
  34. while(myDR.Read()) 
  35. RenderingXml+="<TreeNode id='"+myDR["BoardID"]+"'>/r/n"
  36. RenderingXml+="<NodeText>"+myDR["BoardName"]+"</NodeText>/r/n"
  37. RenderingXml+="<title>"+myDR["Title"]+"</title>/r/n"
  38. RenderingXml+="<NodeUrl>"+EncodeHTML 
  39. ( EncodeParameter( myDR["Link"].ToString() ) )+"</NodeUrl>/r/n"
  40. RenderingXml+="<child>"+myDR["children"]+"</child>/r/n"
  41. RenderingXml+="<target>"+myDR["Target"]+"</target>/r/n"
  42. RenderingXml+="</TreeNode>/r/n"
  43. catch(System.Data.SqlClient.SqlException ee) 
  44. return ; 
  45. finally 
  46. myDataLayer.Close() ;  
  47. RenderingXml+="</xml>"
  48. byte[] bytResult = Encoding.Default.GetBytes( RenderingXml ) ; 
  49. Response.ContentType = "text/xml" ; 
  50. Response.BinaryWrite( bytResult ) ; 
  51. }  
  52. /// <summary> 
  53. /// Description:加密路径参数 
  54. /// </summary> 
  55. /// <param name="sourParameter"></param> 
  56. /// <returns></returns> 
  57. private string EncodeParameter( string sourParameter ) 
  58. string startString = String.Empty ; 
  59. string endString = String.Empty ;  
  60. StringBuilder destParameter = new StringBuilder() ; 
  61. if( sourParameter == null || sourParameter.Equals("") ) 
  62. destParameter.Append( String.Empty ).ToString() ; 
  63. else 
  64. //开始分析路径里的?字符 
  65. if( sourParameter.IndexOf("?")<0 ) 
  66. destParameter.Append( sourParameter ).ToString() ; 
  67. else 
  68. //以?号分割路径 
  69. string[] paramPath = sourParameter.Split( new char[]{'?'} ) ; 
  70. startString = paramPath[0].ToString() ; 
  71. endString = paramPath[1].ToString() ; 
  72. //开始分析路径里的&字符 
  73. if(sourParameter.IndexOf("&")<0) 
  74. //只有一个参数,用=号分割,直接把NameValue进行Des加密 
  75. string[] paramNameValue = endString.Split( new char[]{'='} ) ; 
  76. string paramName = myDES.Encrypt 
  77. ( paramNameValue[0].ToString() ,myDESKey ) ; 
  78. string paramValue = myDES.Encrypt 
  79. ( paramNameValue[1].ToString() ,myDESKey ) ; 
  80. destParameter.Append( startString ).Append("?"). 
  81. Append( paramName ).Append("=").Append( paramValue ) ; 
  82. else 
  83. //有多个参数,以&号分割?号后面的路径 
  84. string[] paramJoin = endString.Split( new char[]{'&'} ) ; 
  85. destParameter.Append( startString ).Append("?"). 
  86. Append( EncoderNameValue( paramJoin ) ) .ToString() ; 
  87. return destParameter.ToString() ; 
  88. }  
  89. /// <summary> 
  90. /// Description:加密路径里的NameValue参数 
  91. /// </summary> 
  92. /// <param name="sourNameValue"></param> 
  93. /// <returns></returns> 
  94. private string EncoderNameValue( string[] sourNameValue ) 
  95. string[] paramNameValue ; 
  96. string paramName ; 
  97. string paramValue ; 
  98. StringBuilder sb = new StringBuilder() ; 
  99. forint i = 0 ; i <= sourNameValue.Length-1 ; i++ ) 
  100. //以=号分割每个NameValue参数 
  101. paramNameValue = sourNameValue[i].Split( new char[]{'='} ) ; 
  102. //开始对NameValue加密 
  103. paramName = myDES.Encrypt( paramNameValue[0].ToString() ,myDESKey ) ; 
  104. paramValue = myDES.Encrypt( paramNameValue[1].ToString() ,myDESKey ) ; 
  105. //存储加密后的路径字符串 
  106. sb.Append( paramName ).Append("=").Append( paramValue ) ; 
  107. //是否最后一个NameValue参数,若不是在路基里添加&参数连接符 
  108. if( i<sourNameValue.Length ) 
  109. sb.Append("&") ; 
  110. return sb.ToString() ; 
  111. }  

以上内容就是C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的全部内容,希望大家喜欢。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表