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#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的全部内容,希望大家喜欢。
下一篇: C#将图片和字节流互相转换并显示到页面上