6.31(财务应用程序:信用卡号的合法性)信用卡号遵循下面的模式。一个信用卡号必须是13到16位的整数。它的开头必须是:

4,指Visa卡

5,指Master卡

37,指American Express卡

6,指Discover卡

在1954年,IBM的Hans Luhn提出一种算法,该算法可以验证信用卡号的有效性。这个算法在确定输入的卡号是否正确,或者这张信用卡号是否被扫描仪正确扫描方面是非常有用的。遵循这个合法性检    测可以生成所有的信用卡号,通常称之为Luhn检测或者Mod 10检测,可以如下描述(为了方便解释,假设卡号为4388576018402626):

1)从右到左对每个数字翻倍。如果对某个数字翻倍之后的结果是一个两位数,那么就将这两位加在一起得到一位数。

2) 现在将第一步得到的所有一位数相加。

4+4+8+2+3+1+7+8=37

3) 将卡号里从右到左在奇数位上的所有数字相加。

6+6+0+8+0+7+8+3=38

4) 将第二步和第三步得到的结果相加。

37+38=75

5) 如果第四步得到的结果能被10整除,那么卡号是合法的;否则,卡号是不合法的。例

如,号码4388576018402626是不合法的,但是号码4388576018410707是合法的。

编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法

的。使用下面的方法设计程序:

1 /**Returntrue if the card number is valid*/

2 public static boolean isVa1id(longnumber)3

4 /**Getthe result from Step2*/

5 public static int sumOfDoubleEvenPIace(longnumber)6 /**Return this number if it is a single digit, otherwise,7 * return the sum of the two digits*/

8 public static int getDigit(intnumber)9 /**Returnsum ofodd-placedigitsin number*/

10 public static intsumOfOddPlace(1ong number)11 /**Returntrue if the digitd is a prefix for number*/

12 public static boolean prefixMatched(1ong number, intd)13 /**Returnthe number ofdigitsin d*/

14 public static intgetSize(1ong d)15 /**Return the first k number ofdigitsfrom number. If the16 * number ofdigitsin number is less than k, return number.*/

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

下面是程序的运行示例:(你也可以通过将输人作为一个宇符串读人,以及对宇符串进行处

理来验证信用卡卡号。

以下为实现这功能的代码:

1 /**fileName: creditCardVerify.java2 * 作用: 计算信用卡号的合法性3 * mail: xuangliang1@live.com4 * 说明: 信用卡号必须是13到16位,开头必须是4,5,37,65 *6 */

7

8 importjava.util.Scanner;9

10 public classcreditCardVerify{11 public static voidmain(String[] args) {12 Scanner input = newScanner(System.in);13 System.out.print("请输入卡号,按Enter结束输入: ");14 long i =input.nextLong();15 if(isValid(i))16 System.out.println(i + " is valid");17 else

18 System.out.println(i + " is invalid");19 }20

21 /**Return true if the card number is valid*/

22 /**返回ture表明这个卡号是有效的*/

23 public static boolean isValid(longnumber) {24 if(prefixMatched(number)){25 if(sumOfdoubleEvenPlace(number)%10 == 0)26 return true;27 }28 return false;29 }30

31 /**

32 * Get the result from Step 2 从步骤2得到结果?。双重偶数之和33 */

34 public static int sumOfdoubleEvenPlace(longnumber) {35 int sum = 0;36 int sumGetdigit = 0;37 long temp = 0;38 int numberSize =getSize(number);39 for(int i =2; i <= numberSize; i += 2){40 temp =getPrefix(number, i);41 sumGetdigit += getDigit((int)temp*2);42 }43 sum = sumGetdigit +sumOfOddPlace(number);44 returnsum;45 }46

47 /**

48 * Retrun this number if it is a single digit, otherwise, Return the sum of the49 * two digits50 *51 * 如果是单个数字,则返回该数字,否则返回两位数的和。获得数字52 */

53 public static int getDigit(intnumber) {54 int numGetDigit = 0;55 if(number % 10 >= 0){56 numGetDigit = number % 10;57 number /= 10;58 numGetDigit +=number;59 returnnumGetDigit;60 }61 returnnumber;62 }63

64 /**

65 * Return sum of odd-place digits in number 返回卡号总右往左的奇位数之和66 */

67 public static int sumOfOddPlace(longnumber) {68 int sum = 0, i = 0;69 int Size =getSize(number);70

71 for(i = 1; i <= Size; i+=2){72 sum +=getPrefix(number, i);73 }74 returnsum;75 }76

77 /**

78 * Return true if the digit d is a prefix for number 判断卡号的前缀是否合法79 */

80 public static boolean prefixMatched(longnumber) {81 int numberSize =getSize(number);82 if(numberSize >= 13 && numberSize <= 16){83 switch((int)getPrefix(number, numberSize)){84 case 4: return true;85 case 5: return true;86 case 6: return true;87 case 3: if((int)getPrefix(number, numberSize -1) == 7)88 return true;89 }90 }91 return false;92 }93

94 /**Return the number of digits in d95 * 获得信用卡号的长度并将结果返回96 */

97 public static int getSize(longd){98 long i= 0;99 while(d > 0){100 i += 1;101 d /= 10;102 }103 return (int)i;104 }105

106 /**Return the first k number of digits from number. If the107 * Number of digits in number is less than k, return number.108 * 从数字中返回第一个k位数。如果数字总的位数小于k,则返回数字。109 * 应该是获得信用卡号的第k位的字母110 */

111 public static long getPrefix(long number, intk){112 int i = 0;113 long temp=0;114 while (i

java 判断是否信用卡_《Java语言程序设计》编程练习6.31(财务应用程序:信用卡号的合法性)...相关推荐

  1. 中国大学 MOOC C语言程序设计----编程部分答案解析

    C语言程序设计----编程部分答案解析 编程题目1 1.求解矩形的面积.(10分) 题目内容:编写一个程序,从键盘读入一个矩形的两个边的值(整数),输出矩形面积. 输入样例:3,5 输出样例:15 时 ...

  2. 郑莉版java第三章答案_java语言程序设计(郑莉)第七章课后习题答案.docx

    java语言程序设计(郑莉)第七章课后习题答案.docx 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: if (matrix.isTria ...

  3. 浙大 java语言程序设计编程答案,浙大《Java语言程序设计》编程答案4

    浙大<Java语言程序设计>编程答案4 实验5 分支结构程序的设计程序填空,不要改变与输入输出有关的语句.一.显示两级成绩 输入一个正整数repeat (0b) min=b;if(minc ...

  4. 福州大学java期末试卷2012_福州大学 07Java语言程序设计试卷(A卷).doc

    福州大学 07Java语言程序设计试卷(A卷) 专业: 姓名: 学号: ==================================== 密 封 线 ===================== ...

  5. java判断地图范围_百度地图java 判断当前位置是否在多边形区域内

    package com.haiyisoft.cAssistant.adapter.hessian; import java.awt.geom.Point2D; import java.util.Arr ...

  6. java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

  7. java判断字符个数_使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. 1 char[] c =str.toCharArray();2 f ...

  8. java后端框架选型_后端语言选型浅谈

    前不久回答了一个关于后端语言选型的问题,写的回答也让笔者有了很多感触,因此在这里谈论下自己对后端语言选型的心得体会,姑且算是抛砖引玉,希望大家能分享各自的心得. 后端语言发展历史 Web 后端语言的兴 ...

  9. java求质数为什么%3ci 2_C语言程序设计部分习题及例题参考程序

    <C语言程序设计>部分例题及课后习题参考程序 1.编程计算如下分段函数: [参考程序] #include <> int main() { float x,y; printf(& ...

  10. java时间和电脑时间_Java语言程序设计(三)显示电脑系统当前时间

    我们这篇文章主要讲述两个显示时间的方法,第一种是显示当前GMT(格林威治标准时间),第二种是显示当前时区自己电脑的时间. 1.显示当前GMT(格林威治标准时间) System类中的方法currentT ...

最新文章

  1. RDKit | 基于RDKit的SMILES转canonical SMILES
  2. 160个Crackme033
  3. 中科大410分计算机排名第几,2021考研成绩发布:中科大400分无缘复试,中山大学321分登顶第二...
  4. lua怎么嵌入php,linux下安装php的lua扩展
  5. 邮件怎发送HTML,请问怎么发送HTML电子邮件
  6. adb工具包_如何使用命令刷机 ADB与FASTBOOT工具使用教程
  7. 计算机硬件对于工作的重要性,计算机硬件日常维护的重要性
  8. 计算机控制手机源码,Total Control电脑控制手机助手
  9. 《看完就懂系列》谈谈数据埋点的原理与实现
  10. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  11. iPhone 行/水货、黑机、妖机、卡贴机科普。
  12. 互联网广告的盈利模式
  13. Forsage系统源码分析
  14. map-box地图点击图标高亮事件
  15. Paper:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双向Tr
  16. Python爬虫登录大学官网
  17. 推荐三款换装变脸软件给你
  18. 计算机屏幕闪烁黑屏,显示器屏幕一闪一闪的黑屏怎么办_电脑屏幕黑屏一闪一闪如何解决...
  19. 12个实用又有趣的工具类网站,每一个都让人欲罢不能
  20. LeetCode:面试题 01.02. 判定是否互为字符重排————简单

热门文章

  1. mmseg底层代码分析及修改
  2. javascript实现 文本过滤 找出一段文本中的所有数字/数值 并在去重后排序
  3. 等一个人好累,爱一个人好苦
  4. 【190319】VC++ C/S结构视频聊天软件源码源代码
  5. 【ZOJ题目分类】备忘
  6. CSAPP - LAB 1 datalab
  7. Attention Is All You Need翻译
  8. 退出码 -1073740791 (0xC0000409)
  9. 【服务器数据恢复】服务器5盘RAID5重建为4盘RAID5后的数据恢复案例
  10. python网络爬虫——使用selenium抓取东方财富网上市公司公告