有效VISA:4222222222222输出为无效

问题描述 投票:0回答:2

当通过cs50的submit50检查运行我的程序时,除了验证

4222222222222
之外,一切正常,因为输出
VISA
(而不是
INVALID
)。当我之前打印count变量时,有时会输出
VISA
。任何解决方案将不胜感激,因为我似乎无法正确解决这个问题。

说明:编写一个程序,提示用户输入信用卡号,然后根据此处每种格式的定义报告(通过

printf
)它是否是有效的美国运通卡、万事达卡或维萨卡号。为了使我们能够自动对您的代码进行一些测试,我们要求您的程序的最后一行输出是
AMEX\n
MASTERCARD\n
VISA\n
INVALID\n
,仅此而已

#include <stdio.h>
#include <cs50.h>


int main(void)
{
    //get input from user
    long CardNum = get_long("Input credit card number:");

    bool nvalid = true;
    //count number of digits
    int count = 0;
    long temp1num = CardNum;
    while (temp1num > 0)
    {
        temp1num = temp1num / 10;
        count++;
    }

    //printf("%i\n", count);

    if (!(count == 13 || count == 15 || count == 16))
    {
        printf("INVALID\n");
    }

    else
    {
       .....


问题出现在代码的开头,所以我只复制了那部分。

c cs50 credit-card luhn
2个回答
1
投票

万事达卡始终以 5 或 2 开头,长度为 16。

Visa 卡始终以 4 开头,长度为 13-16-19。

你很接近。尝试在 if 语句中添加 VISA 支持的长度的附加条件,它应该可以解决您的问题。或者,为什么不直接检查卡片长度是否为 13 - 19?看来失败是因为 Visa 支持不同的卡长度。

我有一个很棒的辅助方法,可以确定卡片类型,非常方便,但它是用 C# 编写的。


0
投票

我不知道你为什么强迫我这样做

© www.soinside.com 2019 - 2024. All rights reserved.