当前位置: 首页 > 知识库问答 >
问题:

信用卡验证-技术上正确,但错误w/算法?

西门靖琪
2023-03-14
import java.util.Scanner;

public class CreditCardTester{

public static void main(String[] args){

    Scanner scanner = new Scanner(System.in);
    String retry = ("y");
    String n = null;

    while(retry.equalsIgnoreCase("y")){ // allows program to keep running even if the user enters in a capital Y
        int lengthCheck = 1;
        System.out.println("Please enter your 8-digit credit card number");

    // check to see whether the input number is exactly 8 digits
        while(lengthCheck==1){
            n = scanner.next();
                if(n.length()==8)
                    lengthCheck=0;
                else
                    System.out.println("Please make sure the credit card number you have entered is 8 digits");
        } // end inner while loop

    // instantiate CardNumber and check validity
    CardNumber number = new CardNumber(n);
    number.check();
    if (number.isValid())
        System.out.println("The number you entered is a valid credit card number.");
    else
        System.out.println("The number you entered is not a valid credit card number. Would you like to enter in another number? (y/n)");
    retry = scanner.next();

    } // end outer while loop

}

}
public class CardNumber {

private String number;
private boolean valid;

public CardNumber(String n){
    number = n;
    valid = true;
}

private void check1(){
    int a = Integer.parseInt(number.substring(7));
    int b = Integer.parseInt(number.substring(5,6));
    int c = Integer.parseInt(number.substring(3,4));
    int d = Integer.parseInt(number.substring(1,2));

    int oddsum = a + b + c + d;

    int e = (Integer.parseInt(number.substring(6,7))) * 2;
    int f = (Integer.parseInt(number.substring(4,5))) * 2;
    int g = (Integer.parseInt(number.substring(2,3))) * 2;
    int h = (Integer.parseInt(number.substring(0,1))) * 2;

    String ee = String.valueOf(e);
    String ff = String.valueOf(f);
    String gg = String.valueOf(g);
    String hh = String.valueOf(h);

    int evensum = (Integer.parseInt(ee.substring(0))) + (Integer.parseInt(ff.substring(0))) + (Integer.parseInt(gg.substring(0))) + (Integer.parseInt(hh.substring(0)));

    int totalsum = evensum + oddsum;
    if (!(totalsum%10 == 0))
    valid=false;
}

public void check(){
    check1();
}

public boolean isValid(){
    return valid;
}

}

我相信还有一个更好的方法来做到这一点,所以所有的建议都很感激!

共有1个答案

厉念
2023-03-14

信用卡号验证称为Luhn算法。下面是一个java实现程序http://www.xinotes.org/notes/note/595/

对于您的代码,我认为这里是:

 int evensum = (Integer.parseInt(ee.substring(0))) + (Integer.parseInt(ff.substring(0))) + (Integer.parseInt(gg.substring(0))) + (Integer.parseInt(hh.substring(0)));

你的意思是把两个数字求和:

int evensum = Integer.parseInt(ee.substring(0,1)) +  Integer.parseInt(ee.substring(1)) ... 
 类似资料:
  • 本文向大家介绍PHP验证信用卡卡号是否正确函数,包括了PHP验证信用卡卡号是否正确函数的使用技巧和注意事项,需要的朋友参考一下 可以使用以下PHP函数,验证一个卡号是否是信用卡:

  • 我在Visual C#中为信用卡号码验证器创建正则表达式时遇到一些问题。卡的数字需要用破折号(-)分隔,第一个数字必须是1-9,第二组数字必须是1-3。所以一个例子是2204-1232-9746-5558或1111-1111-1111-1111。 以下是我目前掌握的情况: 我尝试的每个卡号都会给出相同的结果,该号码无效。谁能把我引向正确的方向?非常感谢!

  • 问题内容: 我如何验证信用卡。我需要做检查。黑莓中有API可以做到吗? 问题答案: 您可以使用以下方法来验证信用卡号

  • 基本上,我使用开发人员身份验证来验证我的用户。即使这个错误显示: AWSiOSSDKv2[Verbose]AWSURLResponseSerialization.m行:87 |-[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:][124;响应主体:[{“u类

  • 问题内容: 非常奇怪的错误。我使用的是http://developers.facebook.com/docs/authentication/。所以我创建了对fb的请求并传递redirect_uri。我在本地主机上使用测试站点。所以如果我通过 redirect_uri = http://localhost/test_blog/index.php 它工作正常,但如果我通过 redirect_uri =

  • 我试图创建一个方法来验证信用卡号,但我们必须将其作为字符串处理 1954年,IBM的Hans Luhn提出了一种验证信用卡号码的算法。该算法有助于确定是否正确输入了卡号或扫描仪是否正确扫描了信用卡。几乎所有的信用卡号码都是根据这种有效性检查生成的,通常称为Luhn检查或模数10检查,可以描述如下。为了说明,请考虑卡号4388576018402625。 从右到左每秒数字加倍。如果一个数字的倍增导致一