欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-16 22:50:34
大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面小编把代码整理如下: /// /// 将...

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

/// <summary>
/// 将传入的字符串中间部分字符替换成特殊字符
/// </summary>
/// <param name="value">需要替换的字符串</param>
/// <param name="startlen">前保留长度</param>
/// <param name="endlen">尾保留长度</param>
/// <param name="replacechar">特殊字符</param>
/// <returns>被特殊字符替换的字符串</returns>
private static string replacewithspecialchar(string value, int startlen = 4, int endlen = 4, char specialchar = '*')
{
 try
 {
  int lenth = value.length - startlen - endlen;
  string replacestr = value.substring(startlen, lenth);
  string specialstr = string.empty;
  for (int i = 0; i < replacestr.length; i++)
  {
   specialstr += specialchar;
  }
  value = value.replace(replacestr, specialstr);
 }
 catch (exception)
 {
  throw;
 }
 return value;
}

效果图展示如下:

复制代码 代码如下:

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

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

c#实现参数隐私代码

using system;
using system.collections;
using system.componentmodel;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
using system.io;
using system.text;
using system.text.regularexpressions;
using system.data.sqlclient;
using system.configuration;
//导入自定义的类库
using _3layer.datalayer.datacommon;
using _3layer.datalayer.datacommon.dataaccess;
using library.classlibrary.crypt.des;
namespace chongchong.xml
public class renderingxml : system.web.ui.page
{
/// <summary>
/// 从数据库预生成xml数据源
/// </summary>
private void prerenderxml()
{
string strsql = "select语句略去........................;
mydatalayer.open();
renderingxml="<?xml version='1.0' 
encoding='gb2312'?>\r\n";
renderingxml+="<xml>\r\n";
try
{ 
system.data.sqlclient.sqldatareader mydr 
= (sqldatareader)mydatalayer.executereader( strsql );
while(mydr.read())
{
renderingxml+="<treenode id='"+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.sqlexception ee)
{
return ;
}
finally
{
mydatalayer.close() ; 
}
renderingxml+="</xml>";
byte[] bytresult = encoding.default.getbytes( renderingxml ) ;
response.contenttype = "text/xml" ;
response.binarywrite( bytresult ) ;
} 
/// <summary>
/// description:加密路径参数
/// </summary>
/// <param name="sourparameter"></param>
/// <returns></returns>
private string encodeparameter( string sourparameter )
{
string startstring = string.empty ;
string endstring = string.empty ; 
stringbuilder destparameter = new stringbuilder() ;
if( sourparameter == null || sourparameter.equals("") )
{
destparameter.append( string.empty ).tostring() ;
}
else
{
//开始分析路径里的?字符
if( sourparameter.indexof("?")<0 )
{
destparameter.append( sourparameter ).tostring() ;
}
else
{
//以?号分割路径
string[] parampath = sourparameter.split( new char[]{'?'} ) ;
startstring = parampath[0].tostring() ;
endstring = parampath[1].tostring() ;
//开始分析路径里的&字符
if(sourparameter.indexof("&")<0)
{
//只有一个参数,用=号分割,直接把namevalue进行des加密
string[] paramnamevalue = endstring.split( new char[]{'='} ) ;
string paramname = mydes.encrypt
( paramnamevalue[0].tostring() ,mydeskey ) ;
string paramvalue = mydes.encrypt
( paramnamevalue[1].tostring() ,mydeskey ) ;
destparameter.append( startstring ).append("?").
append( paramname ).append("=").append( paramvalue ) ;
}
else
{
//有多个参数,以&号分割?号后面的路径
string[] paramjoin = endstring.split( new char[]{'&'} ) ;
destparameter.append( startstring ).append("?").
append( encodernamevalue( paramjoin ) ) .tostring() ;
}
}
}
return destparameter.tostring() ;
} 
/// <summary>
/// description:加密路径里的namevalue参数
/// </summary>
/// <param name="sournamevalue"></param>
/// <returns></returns>
private string encodernamevalue( string[] sournamevalue )
{
string[] paramnamevalue ;
string paramname ;
string paramvalue ;
stringbuilder sb = new stringbuilder() ;
for( int i = 0 ; i <= sournamevalue.length-1 ; i++ )
{
//以=号分割每个namevalue参数
paramnamevalue = sournamevalue[i].split( new char[]{'='} ) ;
//开始对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("&") ;
}
}
return sb.tostring() ;
}
} 

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