Отформатируйте номер социального страхования (SSN) как XXX-XX-XXXX из XXXXXXXXX - PullRequest
13 голосов
/ 09 ноября 2010

Я получаю номер социального страхования (SSN) из хранилища данных. При публикации в CRM я хочу, чтобы он был отформатирован как XXX-XX-XXXX вместо XXXXXXXXX.

Это похоже на преобразование простой строки с тире в позициях 4 и 7. Я довольно новичок в C #, так что это лучший способ сделать это?

Ответы [ 6 ]

50 голосов
/ 09 ноября 2010

Для простого, короткого и самостоятельного комментирования попробуйте:

String.Format("{0:000-00-0000}", 123456789) 

123456789 представляет вашу переменную SSN.

43 голосов
/ 09 ноября 2010

Проверьте метод String.Insert .

string formattedSSN = unformattedSSN.Insert(5, "-").Insert(3, "-");
4 голосов
/ 09 ноября 2010
string ssn = "123456789";

string formattedSSN = string.Join("-", 
                                  ssn.Substring(0,3), 
                                  ssn.Substring(4,2), 
                                  ssn.Substring(6,4));

@ Параметр Джорджа, вероятно, будет более понятным, если SSN хранится в виде числа, а не строки.

1 голос
/ 12 декабря 2018

На всякий случай, если это кому-то поможет, вот метод, который я создал для маскировки и форматирования номера SSN:

ИСПОЛЬЗОВАНИЕ:

string ssn = "123456789";
string masked = MaskSsn(ssn); // returns xxx-xx-6789

КОД:

public static string MaskSsn(string ssn, int digitsToShow = 4, char maskCharacter = 'x')
{
    if (String.IsNullOrWhiteSpace(ssn)) return String.Empty;

    const int ssnLength = 9;
    const string separator = "-";
    int maskLength = ssnLength - digitsToShow;

    // truncate and convert to number
    int output = Int32.Parse(ssn.Replace(separator, String.Empty).Substring(maskLength, digitsToShow));

    string format = String.Empty;
    for (int i = 0; i < maskLength; i++) format += maskCharacter;
    for (int i = 0; i < digitsToShow; i++) format += "0";

    format = format.Insert(3, separator).Insert(6, separator);
    format = "{0:" + format + "}";

    return String.Format(format, output);
}
0 голосов
/ 11 июня 2015

Над ответом может быть исключение повышения, когда строка не фиксированной длины.

В моем случае я использовал следующий способ форматирования SSN и его работу.

string SSN = "56245789";
if (SSN.Length > 3 && SSN <= 5)
      SSN = SSN.Insert(3, "-");
else if (SSN.Length > 5)
      SSN = SSN.Insert(5, "-").Insert(3, "-");

Следовательно, SSN получит 562-45-789.

0 голосов
/ 09 ноября 2010

Без проверки данных и при условии, что вы получите только 9-символьную строку, я бы сказал что-то вроде этого -

return s.Substring(0, 3) + "-" + s.Substring(3, 2) + "-" + s.Substring(5, 4);

Но ... я тоже довольно новый ... поэтому ответ Гендо Икари намного лучше.

...