给定一个长号,其中包含信用卡号的位数;任务是通过程序查找信用卡号是否有效。

为了检查信用卡是否有效,以下是我们必须确认的声明结果。

信用卡号必须为13至16位数字,并且必须以以下数字开头。所有签证卡从4开始

所有主卡从5开始

37是美国运通卡的起点

所有发现卡均从6开始

检查信用卡是否有效的步骤-

步骤1-从右到左,我们必须将每个数字加倍,如果将数字加倍的结果是一个数字,则保持原样,否则将两个数字加起来得到一个数字。(例如22 = 2 + 2 = 4)

步骤2-从卡号的右到左开始,将所有数字添加到奇数位。

步骤3-添加从步骤1获得的所有单位数字。

步骤4-将步骤2和步骤3的结果相加。

步骤5-如果结果可被10整除,则卡号有效,否则该卡号无效。

示例Input: n = 4440967484181607

Output: 4440967484181607 is valid

Input: n = 379354508162306

Output: 379354508162306 is valid

我们用来解决问题的方法-

我们将对数字4440967484181607使用Luhn支票或mod 10支票。

算法Start

Step1-> In function void main(String[] args)

Declare and initialize cnumber = 4440967484181607L

Call function validitychk

Print the result

Step 2-> In function boolean validitychk(long cnumber)

Return thesize(cnumber) >= 13 && thesize(cnumber) <= 16) && (prefixmatch(cnumber, 4) ||

prefixmatch(cnumber, 5) || prefixmatch(cnumber, 37) || prefixmatch(cnumber, 6)) && ((sumdoubleeven(cnumber) +

sumodd(cnumber)) % 10 == 0

Step 3-> In function int sumdoubleeven(long cnumber)

Declare and set sum = 0

Declare and set num = cnumber + ""

Loop For i = thesize(cnumber) – 2 and i >= 0 and i -= 2

Set sum = sum + getDigit(Integer.parseInt(num.charAt(i) + "") * 2)

Return sum

Step 4-> In function int getDigit(int cnumber)

if cnumber

Return cnumber

Return cnumber / 10 + cnumber % 10

Step 5-> In function int sumodd(long cnumber)

Set sum = 0

Set num = cnumber + ""

Loop For i = thesize(cnumber) – 1 and i >= 0 and i -= 2

Set sum = sum + Integer.parseInt(num.charAt(i) + "")

Return sum

Step 6-> In function boolean prefixmatch(long cnumber, int d)

Return getprefx(cnumber, thesize(d)) == d

Step 7-> In function int thesize(long d)

Set num = d + ""

Return num.length()

Step8-> In function long getprefx(long cnumber, int k)

If thesize(cnumber) > k then,

Set num = cnumber + ""

Return Long.parseLong(num.substring(0, k))

Return cnumber

Stop

示例import java.util.Scanner;

public class Main {

//主要方法

public static void main(String[] args) {

long cnumber = 4440967484181607L;

System.out.println(cnumber + " is " + (validitychk(cnumber) ? "valid" : "invalid"));

}

//如果卡号有效,则返回true-

public static boolean validitychk(long cnumber) {

return (thesize(cnumber) >= 13 && thesize(cnumber) <= 16) && (prefixmatch(cnumber, 4)

|| prefixmatch(cnumber, 5) || prefixmatch(cnumber, 37) || prefixmatch(cnumber, 6))

&& ((sumdoubleeven(cnumber) + sumodd(cnumber)) % 10 == 0);

}

//从步骤2中获取结果

public static int sumdoubleeven(long cnumber) {

int sum = 0;

String num = cnumber + "";

for (int i = thesize(cnumber) - 2; i >= 0; i -= 2)

sum += getDigit(Integer.parseInt(num.charAt(i) + "") * 2);

return sum;

}

//如果它是一位数字,则返回此cnumber,否则,

//返回两个数字的总和

public static int getDigit(int cnumber) {

if (cnumber

return cnumber;

return cnumber / 10 + cnumber % 10;

}

//返回cnumber中的奇数位和

public static int sumodd(long cnumber) {

int sum = 0;

String num = cnumber + "";

for (int i = thesize(cnumber) - 1; i >= 0; i -= 2)

sum += Integer.parseInt(num.charAt(i) + "");

return sum;

}

//如果数字d是cnumber前缀,则返回true

public static boolean prefixmatch(long cnumber, int d) {

return getprefx(cnumber, thesize(d)) == d;

}

//返回d中的位数

public static int thesize(long d) {

String num = d + "";

return num.length();

}

//返回前k个数字

//数。如果数字中的位数

//小于k,返回数字。

public static long getprefx(long cnumber, int k) {

if (thesize(cnumber) > k) {

String num = cnumber + "";

return Long.parseLong(num.substring(0, k));

}

return cnumber;

}

}

输出结果4440967484181607 is valid

信用卡Java_信用卡号验证Java程序相关推荐

  1. 批处理文件 执行java_利用批处理文件运行java程序

    当我们要运行java程序时,可以写一个批处理文件(.bat),以便双击即可运行java程序! 在次测试过程中需要注意的几个问题: 1.当需要java程序需要引进第三方包时,需要在设置classpath ...

  2. 能编译java_我能够编译java程序但不能运行java程序

    当我运行java程序时,它给出了以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: check Cau ...

  3. 8年java_一个8年Java程序员的年终总结,献给还在迷茫中的你

    恍然间,发现自己在这个行业里已经摸爬滚打了8年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过程中却遭到了重大的挫折. 详细过程我就不再叙述 ...

  4. 蓝桥信用卡号验证 JAVA纯暴力破解

    1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字, 先乘以2(如果乘积为两位数,则将其减去9),再求和. 3.将奇数位总和加上偶数位总和, ...

  5. 身份证号验证js程序

    最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...

  6. 双击执行java_双击以执行Java程序

    本文的代码在windows下和linux下均测试通过: Java代码: packagecom.pinus.util; importjava.awt.Container; importjava.awt. ...

  7. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  8. JAVA程序员从菜鸟到菜鸟

    CSDN十大风云博客专栏评选结果公布!            下载频道分享季1:分享经典,领取积分!           CSDN博客皮肤评选活动火爆开启! [置顶] Java程序员从笨鸟到菜鸟之(序 ...

  9. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

最新文章

  1. 再见,FastJson...
  2. 跨平台SSE、AVX指令测试
  3. mysql数据库约束无符号_mysql 数据类型 约束条件
  4. Azure Bill
  5. ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现
  6. 智慧政务解决方案(28页)pdf_智慧政务解决方案在政务服务大厅中的应用
  7. 如何避免Java线程中的死锁?
  8. 小汤学编程之JDBC番外篇——DBUtil工具类
  9. linux打if语句如何换行,如何在Linux中的列内换行
  10. 爬虫养成记 - urllib2的调试和错误处理
  11. Pytorch损失函数BCELoss,BCEWithLogitsLoss
  12. Redis集群功能配置以及Redis Sentinel配置
  13. 二维傅里叶变换简化方式
  14. html如何取消页眉页脚设置,jquery web打印 取消 页眉和页脚
  15. python3画直方图_python如何画直方图
  16. D - Circular Addition
  17. MDK的编译过程及文件类型全解——(二)
  18. 西门子plc200smart与三菱变频器modbus通讯程序
  19. 用地图说话 在商业分析与演示中运用Excel数据地图 全彩
  20. python创建字典的两种方法要求键星期一到星期天_Python3笔记019 - 4.4 字典

热门文章

  1. 2021年金属非金属矿山(地下矿山)安全管理人员新版试题及金属非金属矿山(地下矿山)安全管理人员作业模拟考试
  2. 我是农村的,我有一个进城的梦
  3. oracle环境变量配置教程,oracle_window中oracle环境变量设置方法分享,window server中Oracle的环境变量设 - phpStudy...
  4. Python pip保姆级环境变量设置
  5. Loadrunner Vuser 一直pending另一种解决思路
  6. Bcompare文件比较工具
  7. AB test 分析经验
  8. 学习笔记 | 数据分析之AB Test
  9. H-ui 前端框架-免费
  10. 【论文阅读】Systematic Comparison of Respiratory Signals for the Automated Detection of Sleep Apnea