我一直试图弄清楚这种Luhns的方法来验证信用卡,但我似乎无法弄清楚。我需要使用方法,而不能使用数组,所以我完全被难住了。
我的问题是,我仍然在学习方法(完全是初学者。去年我试着学过一次代码,但放弃了,但这次我设法做到了这一点),我不知道如何使用这些方法来完成Luhn检查中的第4步和第5步。
谁能帮我一下吗?谢谢!!
public static boolean isValid(String x) {
return false; // Stub method
}
public static void AddResults() {
}
public static void OddDigits(String s) {
int sum = 0;
for (int index = 0; index < s.length(); index ++) {
if (index % 2 != 0) {
sum = sum + Character.getNumericValue(s.charAt(index));
}
}
return;
}
public static int DoubleToSingle(int x) { // Adds up the digits in a two-digit number.
if (x < 10) {
return x;
}
else {
int firstDigit = x % 10;
int secondDigit = (int)(x / 10);
return firstDigit + secondDigit;
}
}
public static void Doubling(String s) {
int sum = 0;
for (int index = s.length() - 1; index > 0; index-= 2) {
int parse = Character.getNumericValue(s.charAt(index));
if (parse > 9) {
sum = sum + DoubleToSingle(parse);
}
else {
sum = sum + parse;
}
}
return;
}
public static boolean CheckLength(String s) {
if (s.length() < 13 || s.length() > 16) { // If the cc number is smaller than 13 digits or larger than 16 digits, it's invalid
return false;
}
else {
return true;
}
}
public static String ReadString(Scanner s) { // Creating a string method. (Using it to practice creating methods)
String x = s.nextLine();
return x;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please input a valid Credit Card number: ");
String CC = ReadString(input);
if (isValid(CC) == true) {
System.out.println(CC + " is valid.");
} else {
System.out.println(CC + " is invalid.");
}
input.close();
}
关于代码的注释:
>
Java命名约定是方法名称以小写字母开头,就像您的isvalid
方法一样。
在DoubleToSingle
方法中,x
是int
,10
是int
,因此x/10
将是int
,结果被截断,这意味着不需要进行这种强制转换:(int)(x/10)
由于doubletoSingle
方法可以处理个位数,因此调用方(doubling
方法)也不需要处理它,因此取消if(parse>9)
测试。
从右边开始计算数字是这样的:
5th digit Odd places:
↓ 3rd digit Don't double these digits, just sum them
↓ ↓ 1st digit
↓ ↓ ↓
999999
↑ ↑ ↑
↑ ↑ 2nd digit Even places, aka "every second digit from right":
↑ 4th digit Double these digits, combine digits when
6th digit two-digit number, then sum them
加倍
方法从最后一个索引开始,而不是从第二个索引开始,它跳过了第一个索引,而这是不应该的。循环应该是:
for (int index = s.length() - 2; index >= 0; index -= 2)
在调用DoubleTosing
方法之前,DoubleTosing
方法确实需要将数字加倍(Parse*2
)。
odddigits
方法从左数奇数/偶数,而它应该从右数。
删除if(索引%2!=0)
测试,并使用与doubling
方法中类似的循环:
for (int index = s.length() - 1; index >= 0; index -= 2)
虽然下面的代码超出了您当前的技能水平,但我想展示它,这样您就可以期待一些东西,能够理解并最终编写类似的代码。
public static boolean isValid(String cc) {
if (! cc.matches("(?=[456]|37)[0-9]{13,16}"))
return false;
int sum = 0;
for (int i = cc.length() - 1, pos = 1; i >= 0; i--, pos++) {
int digit = cc.charAt(i) - '0';
sum += (pos % 2 == 1/*odd*/ ? digit : digit < 5 ? digit * 2 : digit * 2 - 9);
}
return (sum % 10 == 0);
}
它测试问题中列出的所有条件,甚至是你还没有开始的“它必须从”部分。在您的技能水平上,您可能应该使用s.startswith(“xx”)
而不是这里使用的matches(...)
正则表达式。
我尝试使用Luhn算法检查信用卡的验证,该算法的工作步骤如下: 2*2=4 4*2=8 1*2=2 4*2=8 现在将步骤1中的所有个位数相加。 4+4+8+2+3+1+7+8=37 简单地说,我的程序总是对我输入的所有内容显示有效。即使它是一个有效的数字并且sumOfOddPlace和sumOfDoubleEvenPlace方法的结果等于零。 不胜感激。
我试图用JAVA开发一个应用程序,它将检查用户输入的信用卡号是否有效。 下面是检查模数10的步骤: 步骤1:从右到左每秒数字加倍。如果一个数字的倍增导致一个两位数,则将这两个数字相加得到一个个位数。 步骤4:求和步骤2和步骤3的结果 步骤5:如果步骤4的结果可被10整除,则卡号有效;否则无效。在这种情况下,卡号无效--因为75不能被10整除。 到目前为止,我的问题是,我尝试的每一个卡号(使用有效的
问题内容: 我对angularjs很陌生。说我的应用程式有表格。使用检查器,我注意到,如果angularjs认为该表单无效,则会向该表单添加ng- invalid类。可爱。 因此,似乎为了检查表单是否有效,我需要使用Jquery选择器来污染我的代码吗?不使用表单控制器来指示表单有效性的angularjs方法是什么? 问题答案: 当您将标签放入ngApp时,AngularJS会自动添加表单控制器(实
Luhn 算法 的实现,用来验证各种识别码,如信用卡号码,IMEI码,国家提供商标识符号码等。 使用 String.split('') ,Array.reverse() 和 Array.map() 结合 parseInt() 得到一个数字数组。 使用 Array.splice(0,1) 获取最后一位数字。 使用 Array.reduce() 来实现 Luhn 算法。 如果 sum 能被 10 整除
这里是错误: 为什么字母*不匹配任何东西??
问题内容: 我有方法必须检查JSON是否有效,该方法在如何检查给定字符串在Java中是否为有效JSON上找到,但是它不起作用。 如果我将此方法与某些字符串一起使用,它将始终返回true。例如: 它给了我, 也给了我 问题答案: 根据如何检查给定字符串在Java中是否为有效JSON,我找到了解决方案但使用库 现在,随机查找的字符串是并且为真。