C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*
大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面小编把代码整理如下:
///<summary> ///将传入的字符串中间部分字符替换成特殊字符 ///</summary> ///<paramname="value">需要替换的字符串</param> ///<paramname="startLen">前保留长度</param> ///<paramname="endLen">尾保留长度</param> ///<paramname="replaceChar">特殊字符</param> ///<returns>被特殊字符替换的字符串</returns> privatestaticstringReplaceWithSpecialChar(stringvalue,intstartLen=4,intendLen=4,charspecialChar='*') { try { intlenth=value.Length-startLen-endLen; stringreplaceStr=value.Substring(startLen,lenth); stringspecialStr=string.Empty; for(inti=0;i<replaceStr.Length;i++) { specialStr+=specialChar; } value=value.Replace(replaceStr,specialStr); } catch(Exception) { throw; } returnvalue; }
效果图展示如下:
ReplaceWithSpecialChar("柯小呆",1,0,'*')-->Result:柯*呆 ReplaceWithSpecialChar("622212345678485")-->Result:6222*******8485 ReplaceWithSpecialChar("622212345678485",4,4,'*')-->Result:6222*******8485
注:如果传入的startLen/endLen超过字符串长度,将抛出下标越界异常
C#实现参数隐私代码
usingSystem; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Drawing; usingSystem.Web; usingSystem.Web.SessionState; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.HtmlControls; usingSystem.IO; usingSystem.Text; usingSystem.Text.RegularExpressions; usingSystem.Data.SqlClient; usingSystem.Configuration; //导入自定义的类库 using_3Layer.DataLayer.DataCommon; using_3Layer.DataLayer.DataCommon.DataAccess; usingLibrary.ClassLibrary.Crypt.DES; namespaceCHONGCHONG.XML publicclassRenderingXML:System.Web.UI.Page { ///<summary> ///从数据库预生成XML数据源 ///</summary> privatevoidPreRenderXML() { stringstrSQL="select语句略去........................; myDataLayer.Open(); RenderingXml="<?xmlversion='1.0' encoding='gb2312'?>\r\n"; RenderingXml+="<xml>\r\n"; try { System.Data.SqlClient.SqlDataReadermyDR =(SqlDataReader)myDataLayer.ExecuteReader(strSQL); while(myDR.Read()) { RenderingXml+="<TreeNodeid='"+myDR["BoardID"]+"'>\r\n"; RenderingXml+="<NodeText>"+myDR["BoardName"]+"</NodeText>\r\n"; RenderingXml+="<title>"+myDR["Title"]+"</title>\r\n"; RenderingXml+="<NodeUrl>"+EncodeHTML (EncodeParameter(myDR["Link"].ToString()))+"</NodeUrl>\r\n"; RenderingXml+="<child>"+myDR["children"]+"</child>\r\n"; RenderingXml+="<target>"+myDR["Target"]+"</target>\r\n"; RenderingXml+="</TreeNode>\r\n"; } } catch(System.Data.SqlClient.SqlExceptionee) { return; } finally { myDataLayer.Close(); } RenderingXml+="</xml>"; byte[]bytResult=Encoding.Default.GetBytes(RenderingXml); Response.ContentType="text/xml"; Response.BinaryWrite(bytResult); } ///<summary> ///Description:加密路径参数 ///</summary> ///<paramname="sourParameter"></param> ///<returns></returns> privatestringEncodeParameter(stringsourParameter) { stringstartString=String.Empty; stringendString=String.Empty; StringBuilderdestParameter=newStringBuilder(); if(sourParameter==null||sourParameter.Equals("")) { destParameter.Append(String.Empty).ToString(); } else { //开始分析路径里的?字符 if(sourParameter.IndexOf("?")<0) { destParameter.Append(sourParameter).ToString(); } else { //以?号分割路径 string[]paramPath=sourParameter.Split(newchar[]{'?'}); startString=paramPath[0].ToString(); endString=paramPath[1].ToString(); //开始分析路径里的&字符 if(sourParameter.IndexOf("&")<0) { //只有一个参数,用=号分割,直接把NameValue进行Des加密 string[]paramNameValue=endString.Split(newchar[]{'='}); stringparamName=myDES.Encrypt (paramNameValue[0].ToString(),myDESKey); stringparamValue=myDES.Encrypt (paramNameValue[1].ToString(),myDESKey); destParameter.Append(startString).Append("?"). Append(paramName).Append("=").Append(paramValue); } else { //有多个参数,以&号分割?号后面的路径 string[]paramJoin=endString.Split(newchar[]{'&'}); destParameter.Append(startString).Append("?"). Append(EncoderNameValue(paramJoin)).ToString(); } } } returndestParameter.ToString(); } ///<summary> ///Description:加密路径里的NameValue参数 ///</summary> ///<paramname="sourNameValue"></param> ///<returns></returns> privatestringEncoderNameValue(string[]sourNameValue) { string[]paramNameValue; stringparamName; stringparamValue; StringBuildersb=newStringBuilder(); for(inti=0;i<=sourNameValue.Length-1;i++) { //以=号分割每个NameValue参数 paramNameValue=sourNameValue[i].Split(newchar[]{'='}); //开始对NameValue加密 paramName=myDES.Encrypt(paramNameValue[0].ToString(),myDESKey); paramValue=myDES.Encrypt(paramNameValue[1].ToString(),myDESKey); //存储加密后的路径字符串 sb.Append(paramName).Append("=").Append(paramValue); //是否最后一个NameValue参数,若不是在路基里添加&参数连接符 if(i<sourNameValue.Length) { sb.Append("&"); } } returnsb.ToString(); } }
以上内容就是C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的全部内容,希望大家喜欢。