Maske alle Ziffern außer der 6 ersten und 4 letzten Ziffern der Zeichenfolge( Länge variiert )
Habe ich eine Karte mit der Zahl als Zeichenkette, zum Beispiel:
string ClsCommon.str_CardNumbe r = "3456123434561234";
Die Länge dieser Karte, die Anzahl kann variieren von 16 bis 19 stellen, je nach Anforderung.
Meine Forderung ist, die ich habe, zeigen die ersten sechs Ziffern und die letzten 4 Ziffern der Kartennummer und Maske, die andere Charaktere in zwischen mit dem Zeichen 'X'.
Habe ich versucht mit subString und umgesetzt werden separat für 16,17,18,19 Ziffern..
Ich split string(ClsCommon.str_CardNumber) für 5 Streicher (str_cardNum1, str_cardNum2, str_cardNum3, str_cardNum4, str_cardNum5 - 4 Ziffern für jede saite..restlichen Ziffern für die 5. saite)
Alle Saiten befinden sich in ClsCommon-Datei.
Basierend auf, dass ich umgesetzt habe die unten, die perfekt funktioniert:
if (ClsCommon.str_CardNumber.Length == 16) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", ClsCommon.str_cardNum4);
}
if (ClsCommon.str_CardNumber.Length == 17) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "X", ClsCommon.str_cardNum4.Substring(1, 3), " ", ClsCommon.str_cardNum5);
}
if (ClsCommon.str_CardNumber.Length == 18) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "XX", ClsCommon.str_cardNum4.Substring(2, 2), " ", ClsCommon.str_cardNum5);
}
if (ClsCommon.str_CardNumber.Length == 19) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "XXX", ClsCommon.str_cardNum4.Substring(3, 1), " ", ClsCommon.str_cardNum5);
}
txtmskcrdnum.Text = ClsCommon.str_CardNumber.PadLeft(ClsCommon.str_CardNumber.Length, 'X').Substring(ClsCommon.str_CardNumber.Length - 4);
Für mehrere Längen, die oben erwähnten Ansatz ist nicht sinnvoll.
Möchte ich einen einzelnen Ansatz, der zeigt die ersten 6 und letzten 4 Ziffern und Masken, die übrigen Ziffern mit X.
Die endgültige Zeichenfolge sollte ein Leerzeichen zwischen jeden 4 stellen.
InformationsquelleAutor der Frage Kartiikeya Baleneni | 2015-06-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert mit jeder Karte, die Anzahl, Länge:
InformationsquelleAutor der Antwort Yannick Meeus
Ich würde so etwas tun (pseudo-C# - nehmen Sie als grobe Idee aufbauen).
Ungetesteten code vor...
InformationsquelleAutor der Antwort David Votrubec
Versuchen, diese ein. Einfach und geradlinig.
InformationsquelleAutor der Antwort jmvtrinidad
Mögliche Umsetzung (acccepts varios Formate z.B. zahlen können in Gruppen unterteilt werden etc.):
diese Umsetzung nur Masken, die Ziffern und das format beibehalten.
InformationsquelleAutor der Antwort Dmitry Bychenko
Einer Methode:
InformationsquelleAutor der Antwort Alex K.
Ich bin sicher, es gibt eine bessere Möglichkeit, dies zu tun:
InformationsquelleAutor der Antwort Ted James
Wie etwa das ersetzen einer bestimmten Gruppe abgestimmt mit Regex :
InformationsquelleAutor der Antwort WizLiz
Viele der gegebenen Lösungen analysieren Sie die Eingabe mehrmals.
Unten präsentiere ich eine Lösung, die analysiert den input nur einmal.
Aber ich habe keine Erfahrung in C#, so wird die Funktion geschrieben ist in Schema.
Die Funktion ist in zwei Teile unterteilt:
(1) besuchen-ersten-6 analysiert die ersten sechs Zeichen und verkettet diese, um den rest der Berechnung.
Beim Besuch des-ersten-6 analysiert die ersten sechs Zeichen, ruft besuchen-rest.
(2) besuchen-rest nutzt die Tatsache, dass wir verzögern können einige Berechnungen, bis wir gewonnen haben, mehr wissen.
In diesem Fall werden wir warten, um festzustellen, ob das element in der Liste angezeigt werden soll, bis wir wissen, wie viele Zeichen noch übrig sind.
Ausgeführt Maske in der Petite Chez Scheme-interpreter
NB. Ich sah dies als eine lustige übung, und ich dachte, ich könnte genauso gut teilen.
Yannick Meeus hat schon eine leicht verständliche Lösung.
So, dies dient nur für die interessiert.
InformationsquelleAutor der Antwort Little Helper
Linq spart coding-Zeilen, kleine code-snippet.
Ersetzt, die mit (*) char oben 6 und unten CardPan Länge minus 4
InformationsquelleAutor der Antwort Dimitris Laliotis