web-dev-qa-db-fra.com

Formatez un numéro de sécurité sociale (SSN) en tant que XXX-XX-XXXX à partir de XXXXXXXXX

Je reçois un numéro de sécurité sociale (SSN) d'un entrepôt de données. Lors de la publication sur un site CRM, je souhaite qu'il soit au format XXX-XX-XXXX au lieu de XXXXXXXXX.

C'est comme convertir une simple chaîne avec des tirets aux positions 4 et 7. Je suis assez nouveau en C #, alors quel est le meilleur moyen de le faire?

13
Ashutosh

Consultez la méthode String.Insert .

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

Pour une solution simple, courte et auto-commentante, essayez:

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

123456789 représentant votre variable SSN.

50
George Johnston
string ssn = "123456789";

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

L'option de @ George est probablement plus propre si le SSN est stocké sous forme numérique plutôt que sous forme de chaîne.

4
wageoghe

Juste au cas où cela aiderait quelqu'un, voici une méthode que j'ai créée pour masquer et formater un SSN:

UTILISATION:

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

CODE:

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);
}
1
edicius6

Sans validation des données et en supposant que vous n'obtenez que 9 chaînes de caractères, je choisirais quelque chose comme ceci - 

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

Mais ... je suis aussi assez nouveau ... alors la réponse de GendoIkari est bien meilleure.

0
Ben Jones

La réponse ci-dessus peut être une exception levée lorsque la chaîne n'est pas de longueur fixe.

Dans mon cas, j’ai utilisé la manière suivante de formater SSN et son fonctionnement.

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

Ainsi, le SSN obtiendra 562-45-789.

0
sam k