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

前端技术 2023/09/08 C#

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

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

本文地址:https://www.stayed.cn/item/21030

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。