Маскировать часть первых 12 символов строки с помощью *? - PullRequest
13 голосов
/ 27 января 2012

Как мне взять значение 123456789012345 или 1234567890123456 и превратить его в:

************2345 и ************3456

Разница между строками выше в том, что одна содержит 15 цифр, а другая - 16.

Я пробовал следующее, но оно не сохраняет последние 4 цифры 15-значного числа, и теперь важно, какая длина строки, будь то 13, 14, 15 или 16, я хочу замаскировать все начало цифры с *, но оставьте последние 4. Вот что я пробовал:

String.Format("{0}{1}", "************", str.Substring(11, str.Length - 12))

Ответы [ 12 ]

0 голосов
/ 27 января 2012

Попробуйте это:

static string Mask(string str)
{
    if (str.Length <= 4) return str;
    Regex rgx = new Regex(@"(.*?)(\d{4})$");
    string result = String.Empty;
    if (rgx.IsMatch(str))
    {
        for (int i = 0; i < rgx.Matches(str)[0].Groups[1].Length; i++)
            result += "*";
        result += rgx.Matches(str)[0].Groups[2];
        return result;
    }
    return str;
}
0 голосов
/ 27 января 2012

Простой способ

   string s = "1234567890123"; // example
   int l = s.Length;
   s = s.Substring(l - 4);
   string r = new string('*', l);
   r = r + s;
...