【问题标题】:How to convert string into int array in C#如何在C#中将字符串转换为int数组
【发布时间】:2011-11-29 04:46:39
【问题描述】:

我正在制作一个信用卡验证器程序,我在其中要求一个字符串,该字符串将是一个 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));

这是我到目前为止所做的,但我的选角没有正确完成。我该如何解决这个问题?

【问题讨论】:

  • 输入和期望输出的例子真的很有帮助......
  • 首先,您应该使用循环,而不是一遍又一遍地复制和粘贴相同的内容。其次,在乘法之前尝试移动括号以强制转换为 int,如下所示:(char)(((int)creditNumbers[0]) * 2)
  • 如果数字代表一个数值 >= 5 会发生什么,因此将其数值加倍不会产生一位数?你到底对那些可怜的信用卡做了什么?
  • @Jason 看起来他正在做校验和计算

标签: c# credit-card checksum


【解决方案1】:

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

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

要使用Luhn algorithm 检查号码,您可以这样做:

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;
}

【讨论】:

  • 这里只展示如何将字符串变量转换为整数变量。
  • 问题实际上是在问什么。但我将问题扩展为包括完整的校验和检查。
【解决方案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())));

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2014-07-05
    相关资源
    最近更新 更多