将XXXXXXXXX的社会安全号码(SSN)格式化为XXX-XX-XXXX

时间:2010-11-08 21:31:29

标签: c# .net string-formatting

我从数据仓库获取社会安全号码(SSN)。在将其发布到CRM时,我希望将其格式化为XXX-XX-XXXX而不是XXXXXXXXX

就像在位置47处使用短划线转换简单字符串一样。我对C#很陌生,那么最好的方法是什么?

7 个答案:

答案 0 :(得分:50)

对于简单,简短和自我评论的解决方案,请尝试:

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

123456789代表您的SSN变量。

答案 1 :(得分:42)

查看String.Insert方法。

string formattedSSN = unformattedSSN.Insert(5, "-").Insert(3, "-");

答案 2 :(得分:4)

string ssn = "123456789";

string formattedSSN = string.Join("-", 
                                  ssn.Substring(0,3), 
                                  ssn.Substring(4,2), 
                                  ssn.Substring(6,4));
如果SSN存储为数字而不是字符串,那么@ George的选项可能更清晰。

答案 3 :(得分:1)

以防万一,这是我创建的用于屏蔽和格式化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);
}

答案 4 :(得分:0)

如果没有数据验证并假设你只得到9个字符串,我会选择这样的东西 -

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

但是......我也很新......所以GendoIkari的回答太好了。

答案 5 :(得分:0)

当字符串不固定长度时,上面的答案可能会引发异常。

在我的情况下,我使用了以下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。

答案 6 :(得分:0)

乔治·约翰斯顿(George Johnston)的回答很好,也是最干净的。只需要一些额外的工作,以防有一个或两个前导 0,并且此示例假定您的起点是字符串格式的 SSN。看看这个:

var socialInString = "003456789";
var formattedSSN = Convert.ToInt32(socialInString).ToString("###-##-####").PadLeft(11, '0');