以间隔字符串作为输入c#的luhn算法



试图实现一个luhn算法,但使用一个间隔字符串作为输入。我试过Linq,一些预定义的字符串函数可能与它直接相关(Trim((,Replace(((,但它没有打印出正确的答案

这是我的代码:

static bool checkCard(string cardNo)    
{   


int[] cardInt = new int[cardNo.Length];
for(int i = 0;i < cardNo.Length; i++){
cardInt[i] = (int)(cardNo[i]);
}
for(int i = cardNo.Length - 2;i >= 0;i-=2){
int temporaryValue = cardInt[i];
temporaryValue*=2;
if(temporaryValue > 9){
temporaryValue = temporaryValue % 10 +1;
}
cardInt[i] = temporaryValue;
}
int sum = 0;
for(int i = 0;i<cardNo.Length;i++){
sum+=cardInt[i];
}
if(sum % 10 == 0){
return true;
}

return false;

}
static void Main(string[] args)
{

int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
{
string card = Console.ReadLine();

if (checkCard(card))
Console.WriteLine("YES");
else
Console.WriteLine("NO");

}
}

输入:4556 7375 8689 9855

输出必须是"0";"是";但它打印出";否";相反我可以编辑什么来消除这个错误?

在您的情况下,我不明白为什么不能只使用char。IsDigit((认为信用卡号不是字母数字这里有一个简短的linq示例:

var digitsOnly = cardNo.Where(x => char.IsDigit(x)).ToArray();
int[] integersArray = digitsOnly.Select( x = int.Parse(x.ToString())).ToArray();  

顺便说一句,如果你把char转换成int,你会得到它的ASCII int值,所以0是48,1是49等等。

这个问题的正确答案是由@Rafalon 提出的

在读取的每个字符串之后添加替换(","(函数

最新更新