屏蔽除字符串的前6位和后4位以外的所有数字(长度各不相同)

Kar*_*eya 18 .net c# string substring masking

我有一个卡号作为字符串,例如:

string  ClsCommon.str_CardNumbe r = "3456123434561234";
Run Code Online (Sandbox Code Playgroud)

根据要求,此卡号的长度可以在16到19位之间变化.

我的要求是我必须显示卡号的前六位和后四位,并用字符"X"掩盖其中的其他字符.

我尝试过使用subString并分别为16,17,18,19位数实现它.

我将字符串(ClsCommon.str_CardNumber)拆分为5个字符串(str_cardNum1,str_cardNum2,str_cardNum3,str_cardNum4,str_cardNum5 - 每个字符串4位数.第5个字符串的剩余数字)

所有字符串都放在ClsCommon文件中.基于此我实现了以下,它完美地工作:

if (ClsCommon.str_CardNumber.Length == 16) {
    txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", ClsCommon.str_cardNum4);

}
if (ClsCommon.str_CardNumber.Length == 17) {
    txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "X", ClsCommon.str_cardNum4.Substring(1, 3), " ", ClsCommon.str_cardNum5);
}
if (ClsCommon.str_CardNumber.Length == 18) {
    txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "XX", ClsCommon.str_cardNum4.Substring(2, 2), " ", ClsCommon.str_cardNum5);
}


if (ClsCommon.str_CardNumber.Length == 19) {
    txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "XXX", ClsCommon.str_cardNum4.Substring(3, 1), " ", ClsCommon.str_cardNum5);
}
txtmskcrdnum.Text = ClsCommon.str_CardNumber.PadLeft(ClsCommon.str_CardNumber.Length, 'X').Substring(ClsCommon.str_CardNumber.Length - 4);
Run Code Online (Sandbox Code Playgroud)

对于多种长度,上述方法无用.

我想要一个显示前6个和后4个数字的方法,并用X屏蔽其他数字.最后一个字符串应该在每4个数字之间有一个空格.

Yan*_*eus 24

这适用于任何卡号长度:

var cardNumber = "3456123434561234";

var firstDigits = cardNumber.Substring(0, 6);
var lastDigits = cardNumber.Substring(cardNumber.Length - 4, 4);

var requiredMask = new String('X', cardNumber.Length - firstDigits.Length - lastDigits.Length);

var maskedString = string.Concat(firstDigits, requiredMask, lastDigits);
var maskedCardNumberWithSpaces = Regex.Replace(maskedString, ".{4}", "$0 ");
Run Code Online (Sandbox Code Playgroud)

  • @DmitryBychenko同意了,但这超出了问题的范围.我们倾向于完全删除所有非数字字符,通过Luhn和Bin检查验证卡号,然后将其吐出屏蔽,有时格式化. (2认同)
  • 我同意 yannick 的回答。去掉所有特殊字符,屏蔽数字,然后用破折号或空格重新格式化数字。您试图在整个过程中保留格式,这让生活变得困难。 (2认同)