我对以下编程任务有疑问.

信用卡号码遵循某些模式.信用卡必须在13到16位之间.它必须从:

•4张Visa卡

•5张万事达卡

•美国运通卡37张

1954年,IBM的Hans Luhn提出了一种验证信用卡号的算法.该算法可用于确定是否正确输入了卡号或扫描仪是否正确扫描了信用卡.几乎所有信用卡号都是在此有效性检查后生成的,通常称为Luhn检查或模数10检查,可以描述如下.例如,请考虑卡号4388576018402625.

>从右到左加倍每秒.如果数字加倍会产生2位数字,请将两位数相加以得到一位数字.

2 x 2 = 4

2 x 2 = 4

4 x 2 = 8

1 x 2 = 2

6 x 2 = 12(1 2 = 3)

5 x 2 = 10(1 0 = 1)

8 x 2 = 16(1 6 = 7)

4 x 2 = 8

>添加步骤1中的所有单个数字

4 4 8 2 3 1 7 8 = 37

>在卡号中从右到左添加奇数位的所有数字

5 6 0 8 0 7 8 3 = 37

>总结第2步和第3步的结果

37 37 = 74

>如果步骤的结果可被10整除,则卡号有效;否则,它无效.例如,号码4388576018402625无效,但号码4388576018410707是有效的Visa卡;号码6011000593748745无效,但号码6011000593748746是有效的Discover卡.

我尝试解决它,如下面的代码所示:

import java.util.Scanner;

public class CreditCardValidation {

public static boolean isValid(long number) {

int total = sumOfDoubleEvenPlace(number) + sumOfOddPlace(number);

if ((total % 10 == 0) && (prefixMatched(number, 1) == true) && (getSize(number)>=13 ) && (getSize(number)<=16 )) {

return true;

} else {

return false;

}

}

public static int getDigit(int number) {

if (number <= 9) {

return number;

} else {

int firstDigit = number % 10;

int secondDigit = (int) (number / 10);

return firstDigit + secondDigit;

}

}

public static int sumOfOddPlace(long number) {

int result = 0;

while (number > 0) {

result += (int) (number % 10);

number = number / 100;

}

return result;

}

public static int sumOfDoubleEvenPlace(long number) {

int result = 0;

long temp = 0;

while (number > 0) {

temp = number % 100;

result += getDigit((int) (temp / 10) * 2);

number = number / 100;

}

return result;

}

public static boolean prefixMatched(long number, int d) {

if ((getPrefix(number, d) == 4)

|| (getPrefix(number, d) == 5)

|| (getPrefix(number, d) == 3)) {

if (getPrefix(number, d) == 3) {

System.out.println("\nVisa Card ");

} else if (getPrefix(number, d) == 5) {

System.out.println("\nMaster Card ");

} else if (getPrefix(number, d) == 3) {

System.out.println("\nAmerican Express Card ");

}

return true;

} else {

return false;

}

}

public static int getSize(long d) {

int count = 0;

while (d > 0) {

d = d / 10;

count++;

}

return count;

}

public static long getPrefix(long number, int k) {

if (getSize(number) < k) {

return number;

} else {

int size = (int) getSize(number);

for (int i = 0; i < (size - k); i++) {

number = number / 10;

}

return number;

}

}

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("Enter a credit card number as a long integer: ");

long input = sc.nextLong();

if (isValid(input) == true) {

System.out.println("\n" + input + " is Valid. ");

} else {

System.out.println("\n" + input + " is Invalid. ");

}

}

}

我的问题是如何使用数组来存储信用卡号而不是使用长号码.

luhn算法 java_java – 使用luhn算法验证信用卡号相关推荐

  1. Python验证信用卡号的有效性(算法)(称为Luhn检测或者mod 10 检测)

    转载自: https://baijiahao.baidu.com/s?id=1662553267127372613&wfr=spider&for=pc 有修改 一个信用卡号必须是13到 ...

  2. Javascript验证信用卡号、信用卡类型(最全最新)

    如果浏览不顺畅请到 原文章出处:https://www.sky8g.com/technology/2690/ 请注意可能会提示风险,这是csdn设置网站设置的问题,请放心访问,谢谢. 本篇文章是由SK ...

  3. Python:打印日历,验证信用卡号是否合法

    Python语言基础-2.5函数基础(理) 第5关:函数综合实训-打印日历 本关任务:利用函数的知识完成如下习题: 1.编写判断信用卡号是否合法的判断程序. 2.编写函数模块,打印日历程序 第1题 信 ...

  4. dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例

    一.前言 开发中经常要处理用户一些文字的提交,所以涉及到了敏感词过滤的功能,参考资料中DFA有穷状态机算法的实现,创建有向图.完成了对敏感词.广告词的过滤,而且效率较好,所以分享一下. 具体实现: 1 ...

  5. luhn算法java_Java信用卡验证– Java中的Luhn算法

    luhn算法java Recently I came to know that Credit Card numbers are not random and passes Luhn Algorithm ...

  6. c语言验证信用卡 卡号介于13到16位,使用luhn算法验证信用卡号码

    信用卡号码符合特定模式.信用卡必须有13到16位数字.它必须先从: •4 Visa卡 •5主卡 •37美国运通卡 在1954年,IBM的汉斯·卢恩提出的算法验证信用卡号.该算法对于确定卡号是否正确输入 ...

  7. Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的

    6.31(金融应用:信用卡号的合法性验证)编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的 6.31题目 题目描述 破题 6.31代码 6.32 代码 运行实例 6 ...

  8. 金融应用:信用卡号的合法性验证

    信用卡号遵循某种模式.一个信用卡号必须是13到16位的整数.它的开头必须是: 4,指Visa卡 5,指Master卡 37,指American Express 卡 6,指Discover卡 1954年 ...

  9. 信用卡号校验java_ES reduce 一行代码解决信用卡号验证问题

    背景 女票 JAVA 课程有一道作业题,验证信用卡号是否合法. 实验作业longer 9月30号 星期五 12:09 实验1:验证信用卡号码 Lab Project: Validating Credi ...

最新文章

  1. Revisiting Salient Object Detection: Simultaneous Detection, Ranking, and Subitizing of Multiple Sal
  2. cv2.getStructuringElement 学习
  3. Angular--TypeScript finalize 方法
  4. 小巧密码破解工具IE PassView使用指南
  5. 2.页面布局示例笔记
  6. HTML+CSS+JS实现 ❤️创意时间轮盘时钟特效❤️
  7. Beta版本(有更改)
  8. python 字符串删除重复_leetcode No.1047 删除字符串中的所有相邻重复项
  9. LeetCode-13.罗马数字转整数
  10. autojs今日头条急速脚本
  11. mac电脑运行速度变慢的十种解决方法
  12. 安卓谷歌地图打开闪退问题解决
  13. 高校计算机专业课程思政案例,高校计算机专业课程思政建设研究
  14. win10蓝牙已配对连接不上_win10系统下蓝牙耳机连接不上如何解决
  15. `算法竞赛题解` LCP 03. 机器人大冒险
  16. 如何快速下载720云高清全景图片
  17. simplest_ffmpeg_streamer加注释版
  18. Win11系统怎么关闭hyper-v虚拟机?
  19. Spring框架中 自动装配的详解 属性值的详解
  20. [Linux系统编程]_文件编程(一)

热门文章

  1. linux 查看用户权限组,linux用户组及权限
  2. 多媒体计算机的核心,多媒体计算机系统的核心
  3. 数据挖掘与数据化运营实战
  4. Apache Solr 任意文件读取
  5. 整理:JavaScript 各种转型函数与类型转换细节
  6. Oracle SQL性能优化 SQL优化
  7. SqlServer遇到以零作除数错误
  8. rror: [$injector:unpr] http...r?p0=contentCategoryServicePro错误解决方案
  9. 【本人秃顶程序员】Java程序员,你会选择25k的996还是18k的965?
  10. NAS如何进行磁盘碎片整理?