使用 C# 的正则表达式自定义 IBAN 代码屏蔽

问题描述 投票:0回答:2

我有一些 IBAN 代码。例如,德国 IBAN:

DE12500123456789012345
。我需要掩盖它并得到这样的结果:
DE*****12345*******345
。但由于每个国家/地区的 IBAN 长度不同,我有以下屏蔽规则:
{2 letters}{5 asterisks}{5 numbers}{n asterisks}{3 numbere}
。因此,如果是 DE IBAN -
DE*****12345*******345
,如果是 BE
BE*****12345*345

如何使用 C# 的 Regex 实现它?

c# regex masking iban
2个回答
2
投票

在您的情况下,不使用正则表达式会更容易、更高效:

var iban = "DE12500123456789012345";
var maskedIban = $"{iban[0..2]}{"".PadRight(5, '*')}{iban[7..12]}{"".PadRight(iban.Length -16, '*')}{iban[^3..]}";
//  ^ "DE*****12345*******345"

0
投票

即使您要求使用字符串计算的正则表达式解决方案,这也可以更容易实现并且(恕我直言)也更具可读性。该解决方案速度更快,内存效率更高。为了使这个解决方案更有效,您还可以循环字符串并动态构建字符串。

由于您指定了所有变量(国家代码(2 位数字)、5 个占位符、5 个数字、n 个占位符和最后 3 位数字),您可以从字符串中提取所有部分,并从字符串的总长度中减去 15 以获得占位符计数.

static string MaskIBANNonRegex(string iban)
{
    if (iban.Length < 15)
    {
        // IBAN is too short to apply the masking rule
        return iban;
    }

    string country = iban.Substring(0, 2);
    string first5 = iban.Substring(7, 5);
    string last3 = iban.Substring(iban.Length - 3);
    string n_asteriks = new string('*', (iban.Length - 15));
    string maskedIBAN = $"{country}*****{first5}{n_asteriks}{last3}";

    return maskedIBAN;
}

Console.WriteLine("DE12500123456789012345");
Console.WriteLine(MaskIBANNonRegex("DE12500123456789012345"));

Console.WriteLine("DE1250012345678901234512345");
Console.WriteLine(MaskIBANNonRegex("DE1250012345678901234512345"));
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.