将卡号转换为XXXX-XXXX-XXXX-0000格式

时间:2016-02-03 16:54:14

标签: c# string.format

我有一个16个字符的字符串,通过类似的东西:

1234567891234567

我需要能够像在系统中那样格式化字符串,即

XXXX-XXXX-XXXX-4567

注意,上面显示的4567位数字与卡号的后四位有关。

This问题有助于将字符串格式化为1234-5678-9123-4567

但它对上面要求的格式没有帮助。

在寻找答案时,我也遇到了以下解决方案:

    string[] subStrings = Enumerable.Range(0, 4).Select(n => cardNumber.Substring(n * 4, 4)).ToArray();
    string result = String.Format("{0}-{1}-{2}-{3}", subStrings);

但是这只会输出字符串1234-5678-9123-4567

我似乎已经达到了解决方案的一部分,但不能格式化其余部分。

4 个答案:

答案 0 :(得分:6)

如果您的字符串信用卡号码始终为16位数字,那么您可以执行以下操作:

string str = "1234567891234567";    
string output = "XXXX-XXXX-XXXX-" + str.Substring(str.Length - 4);

答案 1 :(得分:2)

您可以重新分配数组值。

subStrings[0] = subStrings[1] = subStrings[2] = "XXXX"

答案 2 :(得分:1)

保留原始代码,您可以这样做:

string[] subStrings = Enumerable.Range(0, 4).Select(n => cardNumber.Substring(n * 4, 4)).ToArray();
string result = String.Format("XXXX-XXXX-XXXX-{0}", subStrings[3]);

答案 3 :(得分:0)

你可以从你的字符串创建一个char []然后你可以将你的char []分组为char [4]的块然后你可以简单地将你的char [4]加入到虚线字符串中。你能试试下面的代码吗?

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        string source = "1234567891234567";
        int chunkSize = 4;

        List<string> chunks = (from i in source.ToCharArray().Select((value, index) => new { Value = value, Index = index })
                                  group i.Value by i.Index / chunkSize into g
                                  select g).Select(x => string.Join("",x)).ToList();


        Console.WriteLine(string.Join("-",chunks));
        Console.WriteLine("XXXX-XXXX-XXXX-"+chunks.Last());
        Console.WriteLine(chunks.First()+"-XXXX-XXXX-"+chunks.Last());
    }
}

希望这会有所帮助。 PS:你可以选择你的块的任何第n个索引来掩盖或显示。