Java 我如何修改我的信用卡验证器程序,只检查我上次检查卡类型的函数中的有效数字?
公共类程序{Java 我如何修改我的信用卡验证器程序,只检查我上次检查卡类型的函数中的有效数字?,java,function,boolean,credit-card,luhn,Java,Function,Boolean,Credit Card,Luhn,公共类程序{ // Global variables to be use in the whole program public static int numOfInvalids = 0 , visaNum=0 ; public static void main(String[] args) { Scanner userInput = new Scanner(System.in) ; System.out.println("How man
// Global variables to be use in the whole program
public static int numOfInvalids = 0 , visaNum=0 ;
public static void main(String[] args)
{
Scanner userInput = new Scanner(System.in) ;
System.out.println("How many credit card you want to check?");
int numOfCredit = userInput.nextInt() ;
int creditnumbers[] = new int[numOfCredit] ;
for (int i = 0 ; i<numOfCredit ; i++)
{
System.out.println("Enter credit card number "+(i+1)+": ") ;
String creditNumber = userInput.next() ;
// checks if number is a credit number or not
if (creditNumber.length()<16 || creditNumber.length()>19)
{
System.out.println("Not a credit card number!") ;
prog.numOfInvalids ++ ; // count number of invalid card numbers
System.out.println();
continue ;
}
checkValid(creditNumber);
checkType(creditNumber) ;
// calls function
}
System.out.println("Number of invalid: "+prog.numOfInvalids) ;
System.out.println("Number of visa credit card: "+prog.visaNum) ;
}
private static boolean checkValid(String cardNumber) // function to check if card number is valid or not
{
int cardlength = cardNumber.length();
int evenSum = 0, oddSum = 0, sum;
for (int i = cardlength - 1; i >= 0; i--) //looping from the right
{
int digit = Character.getNumericValue(cardNumber.charAt(i)); // Character.getNumericValue = convert char to integer
if (i % 2 == 0) // taking every 2nd digits from the right e.g 2nd..4th..6th..8th etc.
{
int multiplyByTwo = digit * 2; // multiply each 2nd digits by 2
if (multiplyByTwo > 9) // Add two digits to handle cases that make two digits after doubling e.g (6 * 2 = 12) = 1 + 2
{
String doubleDigits = String.valueOf(multiplyByTwo); // convert double digit to String for use of charAt function
multiplyByTwo = Character.getNumericValue(doubleDigits.charAt(0)) + Character.getNumericValue(doubleDigits.charAt(1)); //convert each character to integer and add them together
}
evenSum += multiplyByTwo; // add product digits together
}
else
{
oddSum += digit; // Add sum of digits that weren’t multiplied by 2
}
}
sum = evenSum + oddSum; //Adding both sums together
if (sum % 10 == 0) //if sum is multiple of 10 , it is valid
{
System.out.println("valid card");
System.out.println();
return true;
}
else
{
System.out.println("invalid card") ;
prog.numOfInvalids ++ ; // count the number of invalid card numbers
System.out.println();
return false;
}
}
private static boolean checkType(String cardNumber) // function to check card type
{
if ( (cardNumber.charAt(0)=='4') && cardNumber.length()==13 || cardNumber.length()==16 ) //checking first character and length of card number
{
System.out.println("VISA");
visaNum ++ ; // counting number of visa cards
return true;
}
else
{
return false;
}
//要在整个程序中使用的全局变量
公共静态int numovalids=0,visaNum=0;
公共静态void main(字符串[]args)
{
扫描仪用户输入=新扫描仪(System.in);
System.out.println(“您要检查多少张信用卡?”);
int numOfCredit=userInput.nextInt();
int creditnumbers[]=新int[numOfCredit];
for(int i=0;i=0;i--)//从右侧循环
{
int digit=Character.getNumericValue(cardNumber.charAt(i));//Character.getNumericValue=将字符转换为整数
if(i%2==0)//从右边每隔2位数取一次,例如第2..4..6..8等。
{
int multiplyByTwo=数字*2;//将每2位数字乘以2
if(multiplyByTwo>9)//添加两位数以处理在加倍后生成两位数的情况,例如(6*2=12)=1+2
{
String doubleDigits=String.valueOf(multiplyByTwo);//将两位数转换为字符串以使用charAt函数
multiplyByTwo=Character.getNumericValue(doubleDigits.charAt(0))+Character.getNumericValue(doubleDigits.charAt(1));//将每个字符转换为整数并相加
}
evenSum+=multiplyByTwo;//将乘积数字相加
}
其他的
{
oddSum+=数字;//将未乘以2的数字相加
}
}
sum=evenSum+oddSum;//将两个和相加
if(sum%10==0)//如果sum是10的倍数,则它是有效的
{
System.out.println(“有效卡”);
System.out.println();
返回true;
}
其他的
{
System.out.println(“无效卡”);
prog.numovalids++;//计算无效卡号的数量
System.out.println();
返回false;
}
}
private static boolean checkType(String cardname)//用于检查卡类型的函数
{
if((cardname.charAt(0)='4')&&cardname.length()==13 | | cardname.length()==16)//检查卡号的第一个字符和长度
{
System.out.println(“VISA”);
visaNum++;//统计visa卡的数量
返回true;
}
其他的
{
返回false;
}
}
}
我只想从第一个函数“check valid”到最后一个函数“check type”检查有效卡的卡类型
是否有任何方法可以保存第一个函数中的有效数字并在“Check Type”函数中使用它们
我只想从第一个函数“check valid”到最后一个函数“check type”检查有效卡的卡类型
是否有任何方法可以保存第一个函数中的有效数字,并在“检查类型”函数中使用它们?基于问题的假设
if
检查checkValid
的响应,如果为true,则调用checkType
if(检查有效(creditNumber){
支票类型(信用编号);
}
暗示
为什么你不能使用regex来验证信用卡号码?你可以检查这个SO链接。这回答了你的问题吗?我想通过检查号码来保持简单我应该把它放在哪里?这应该取代现有的调用
main
。我真诚地请求你学习java的基础知识,因为它将帮助你解决这些问题你自己提问,最终会增加对该主题的兴趣。祝你愉快。感谢你的帮助。最后一个问题:我应该添加“if checkValid(creditNumber)=true”还是让它像你写的那样不管怎样都可以。这是你个人的偏好。通常我写if(someboolfunc())
用于true
和if(!someboolfunc())
用于false