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

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

信用卡号必须为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. 数据意识上的“代沟”
  2. 13.2.6 会话跟踪技术
  3. Centos 7 docker 拉取镜像慢
  4. NKU 专题一 题解
  5. 您的请求参数与订单信息不一致_[淘客订单检测]淘宝客订单检测接口,淘客订单查询API...
  6. [Bugku][Web][CTF] 9-15 write up
  7. Microsoft Azure Remoteapp使用自定义镜像创建桌面服务
  8. PyTorch 1.0 中文官方教程:序列模型和LSTM网络
  9. 那些长期单身的人,到底在想什么?
  10. Swift之UITextField+富文本+代理传值
  11. while java_(Java) while循环
  12. ASIHTTPRequest框架进行文件下载
  13. 如何在solarwinds中自定义 OID
  14. 19-Spring Security资源服务器配置详解
  15. zTree 树形中的搜索定位节点
  16. 捷径晚年生活/养老方式大全110+城市旅居场景
  17. SUMO交通仿真软件从0到1使用【亲测有用】有疑问评论区可解答
  18. gitee上贡献度不显示问题的设置
  19. Python  UnicodeEncodeError 和 surrogates not allowed 报错处理
  20. Factory(工厂)模式

热门文章

  1. 极客Java项目实战营郑天民
  2. Chromium Embedded Framework (CEF)
  3. Overlapped I/O笔记
  4. app内嵌H5,禁止图片长按保存。
  5. SAP 在建工程转固定资产
  6. go语言错误和异常处理,panic、defer、recover的执行顺序
  7. VUE学习-基础(一)
  8. 碳纳米管包四氧化三铁Fe3O4纳米粒子|氧化石墨烯包覆Fe3O4空心球纳米复合材料(r-GO/Fe3O4)|齐岳
  9. Bit----组件管理工具
  10. 研究生坑导师行为大赏!导师为了让大弟子毕业,不得已自写论文...