如何在C#中将字符串转换为整数数组

3

我正在制作一个信用卡验证程序,其中我要求输入一个字符串,该字符串将是一个16位数字(信用卡号),并且我想将其转换为int数组。我该怎么做?然后,我需要从第一位数字开始,将每个其他数字乘以2。

char[] creditNumbers = creditCardNumber.ToCharArray();

creditNumbers[0] = (char)((int)(creditNumbers[0] * 2));
creditNumbers[2] = (char)((int)(creditNumbers[2] * 2));
creditNumbers[4] = (char)((int)(creditNumbers[4] * 2));
creditNumbers[6] = (char)((int)(creditNumbers[6] * 2));
creditNumbers[8] = (char)((int)(creditNumbers[8] * 2));

这是我目前完成的,但我的转换没有正确执行。我该如何解决问题?


3
一个输入和期望输出的例子会非常有帮助... - Jon Skeet
1
首先,你应该使用循环,而不是一遍又一遍地复制和粘贴相同的内容。其次,尝试将括号移动到乘法之前进行强制转换为int类型,像这样:(char)(((int)creditNumbers[0]) * 2) - someone
5
如果数字代表一个数值>=5,那么将其数值加倍后不会得到一个个位数。那么你到底对这些可怜的信用卡做了什么? - jason
这可能会有所帮助:https://dev59.com/kHA65IYBdhLWcg3wuhIR - drneel
@Jason 看起来正在进行校验和计算。 - Daniel Mann
显示剩余4条评论
2个回答

8

想要获取int数组,我会这样做:

creditCardNumber.Select(c => int.Parse(c.ToString())).ToArray()

使用Luhn算法检查数字,您可以执行以下操作:

bool IsValid(string creditCardNumber)
{
    var sum = creditCardNumber.Reverse()
                              .Select(TransformDigit)
                              .Sum();

    return sum % 10 == 0;
}

int TransformDigit(char digitChar, int position)
{
    int digit = int.Parse(digitChar.ToString());
    if (position % 2 == 1)
        digit *= 2;

    return digit % 10 + digit / 10;
}

这仅展示了如何将字符串变量转换为整型变量。 - AlexSavAlexandrov
1
这其实是问题所在。但我扩展了问题,包括完整的校验和检查。 - svick

2
var intArray = creditCardNumber.ToCharArray().Select(o => int.Parse(o.ToString())).ToArray();
var result = new List<int>();

for(int i=0; i<intArray.Length; i++){

    if((i % 2) == 0)
      result.Add(intArray[i] * 2);
    else
        result.Add(intArray[i]);
}

Console.Write(string.Concat(result.Select(o => o.ToString())));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接