代码之家  ›  专栏  ›  技术社区  ›  Ashutosh

将社会保险号码(SSN)从XXXXXXXXX格式化为XXX-XX-XXXX

  •  13
  • Ashutosh  · 技术社区  · 14 年前

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

    这就像转换一个位置上带有破折号的简单字符串 4 7 . 我对C很陌生,所以最好的方法是什么?

    6 回复  |  直到 6 年前
        1
  •  42
  •   GendoIkari    14 年前

    查看 String.Insert 方法。

    string formattedSSN = unformattedSSN.Insert(5, "-").Insert(3, "-");
    
        2
  •  50
  •   George Johnston    13 年前

    要获得简单、简短和自我评价的解决方案,请尝试:

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

    123456789 表示您的SSN变量。

        3
  •  4
  •   wageoghe    14 年前
    string ssn = "123456789";
    
    string formattedSSN = string.Join("-", 
                                      ssn.Substring(0,3), 
                                      ssn.Substring(4,2), 
                                      ssn.Substring(6,4));
    

    @如果将SSN存储为数字而不是字符串,则George的选择可能更干净。

        4
  •  1
  •   edicius6    6 年前

    为了以防万一,我创建了一个方法来屏蔽和格式化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);
    }
    
        5
  •  0
  •   Ben Jones    14 年前

    如果没有数据验证,并且假设您只得到9个字符串,我将使用类似的方法-

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

    但是……我也是个新手……所以gendoikari的答案是好得多。

        6
  •  0
  •   kmas    9 年前

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

    在我的例子中,我使用了下面的方式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。