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#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的全部内容,希望大家喜欢。