转载自---课内实验记录|信用卡号的合法性检查 2019年05月05日 21:37:45 @退堂鼓一级演员
题目要求
(附加题6.31 信用卡号的合法性,可选做)
信用卡号遵循下面的模式。一个信用卡号必须是13-16位的整数。它的开头必须是:
4,指visa卡
5,指master卡
37,指American Express卡
6,指Discovery卡
在1954年,IBM的Hans Luhn提出一种算法,该算法可以验证信用卡号的有效性。这个算法在确定输入的卡号是否正确,或者这张信用卡是否能被正确扫描是非常有用的。该方法通常被称为Luhn检测或Mod10 检测,描述如下(假设卡号是4388576018402626)
(1)从右至左对偶数位上的数字翻倍。如果数字翻倍后是一个两位数,那么就将这两位加在一起得到一位数。
2 * 2 =4
2 * 2=4
4 * 2=8
1 * 2=2
6 * 2=12(1+2=3)
5 * 2=10(1+0=1)
8 * 2=16(1+6=7)
4 * 2=8
(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整除,则卡号是合法的,否则是不合法的。
75%10 !=0
编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法还是非法的。使用下面的方法设计程序:
/Return true if the card number is valid/
public static boolean isValid(long number)
/Get the result from step 2/
public static int sumOfDoubleEvenPlace(long number)
/Return this number if it is a single digit, otherwise return the sum of the two digits/
public static int getDigit(int number)
/Return sum of odd place digits in number/
public static int sumOfOddPlace(long number)
/Return true if the digit d is a prefix for number/
public static boolean prefixMatched(long number, int d)(这个费了死劲也没用上=.=)
/Return the number of digits in d/
public static int getSize(long d)
/Return the first k number of digits from number. If the number of digits in number is less than k, return number/
public static long getPrefix(long number, int k)
实验报告内容
1.实验运行
首先根据提示输入一个长整型的信用卡号
再输入信用卡号
如果信用卡不合法,提示不合法
如果信用卡合法,提示合法
如果输入无效,提示输入无效
2.结果分析
A.实验思路
主函数思路:
根据提示输入长整型信用卡号,先判定是否有效,再对信用卡号的反偶数位和反奇数位求和并判断是否整除10,输出结果;
getSize函数思路:
先取count 为1,在信用卡号除10非0时每存在一次计数器加一,直到除尽,然后返回count;
getPrefix函数思路:
对输入的前缀的位数,减去getSize的长度数并减去前缀数,然后除10操作其次数次,得到的结果即为prefix;
isValid函数思路:
判断长度:13-16位,调用getSize函数
判断前缀:3,4,5,37,调用getPrefix函数
getDigit函数思路:
对输入的数判断,如果大于10,将num % 10 + 1的结果返回(即将两位的数字相加,十位数字一定是1);否则返回原值
sumOfDoubleEvenPlace函数思路:
首先除10到第二位;
然后模10取最后一位,判断是否是两位数(调用getDigit函数),返回值后将其加到sum上,除去100得到下两位的数,重复操作直到除尽,返回sum;
sumOfOddPlace函数思路:
同sumOfDoubleEvenPlace函数思路但不用进行getDigit判断
B.实验改进
使用while(true),break结构实现长时间处理,输入0时结束操作;
3.源代码
**Experiment5**
import java.util.Scanner;
public class experiment5 {
/*Return the number of digits in d*/
public static int getSize(long d){
int count = 1;
while(d / 10 != 0){
d /= 10;
count++;
}
return count;
}
/*Return the first k number of digits from number. If the number of digits in number is less than k, return number*/
public static long getPrefix(long number, int k){
int index = getSize(number) - k;
for(int i =0; i < index;i++)number /= 10;
return number;
}
/*Return true if the card number is valid*/
public static boolean isValid(long number){
if(getSize(number)>= 13 && getSize(number)<= 16 && (getPrefix(number, 1) == 4 || getPrefix(number, 1)== 5 || getPrefix(number, 1)== 6 || getPrefix(number, 2)==37))
return true;
else return false;
}
/*Return this number if it is a single digit, otherwise return the sum of the two digits*/
public static int getDigit(int number){
int re = 0;
if(number >= 10){
re = number % 10 + 1;
}
else re = number;
return re;
}
/*Get the result from step 2*/
public static int sumOfDoubleEvenPlace(long number){
number /= 10;
int sum = 0;
while(number != 0){
int temp = (int) (number % 10 * 2);
sum += getDigit(temp);
number /= 100;
}
return sum;
}
/*Return sum of odd place digits in number*/
public static int sumOfOddPlace(long number){
int sum = 0;
while(number != 0){
sum += number % 10;
number /= 100;
}
return sum;
}
public static void main(String[] args){
//持续输入
while(true){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个长整型的信用卡号,以0结束");
long num = input.nextLong();
if(num == 0){
System.out.println("程序结束");
break;
}
int size = getSize(num);
//当有效时,将奇偶数结果相加进行判断
if(isValid(num)){
int sum1 = sumOfDoubleEvenPlace(num);
int sum2 = sumOfOddPlace(num);
int sum = sum1+sum2;
if(sum % 10 == 0)System.out.println("这个卡号是合法的");
else System.out.println("这个卡号是不合法的");
}
//当无效时,提示
else System.out.println("这个卡号是无效的");
}
}
}
---------------------
作者:退堂鼓一级演员
来源:CSDN
原文:https://blog.csdn.net/yeweij226/article/details/89855907
版权声明:本文为博主原创文章,转载请附上博文链接!
后面看到这个写的。。20多行写完也是6
https://www.cnblogs.com/liuzhen1995/p/6896199.html
转载自---课内实验记录|信用卡号的合法性检查 2019年05月05日 21:37:45 @退堂鼓一级演员相关推荐
- 课内实验记录|信用卡号的合法性检查
题目要求 (附加题6.31 信用卡号的合法性,可选做) 信用卡号遵循下面的模式.一个信用卡号必须是13-16位的整数.它的开头必须是: 4,指visa卡 5,指master卡 37,指American ...
- 【数据库系统原理】数据库课内实验
说明:这是武汉理工大学计算机学院[数据库系统原理]课程课内实验. >>点击查看武汉理工大学计算机专业课程资料汇总 >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅 ...
- 武汉理工大学操作系统 课内实验
文章目录 前言 主要仪器设备及耗材 一.动态分区管理 实验内容描述 实验基本原理与设计 二.磁盘调度 实验内容描述 实验基本原理与设计 总结 前言 操作系统课内实验有两个,验收的学姐人贼好,只看了验收 ...
- 武汉理工大学数值分析课内实验
文章目录 前言 主要仪器设备及耗材 一.用C语言实现几个多项式插值的程序.(Lagrange插值.Newton插值) 实验内容描述 实验基本原理与设计 分析与设计 实验结果 二.用C语言实现几个求常微 ...
- webservice-UML课内实验报告实验三
1.webservice 现将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice. 简单来说,webservice就是远程调用技术,也叫X ...
- Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的
6.31(金融应用:信用卡号的合法性验证)编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的 6.31题目 题目描述 破题 6.31代码 6.32 代码 运行实例 6 ...
- java 判断是否信用卡_《Java语言程序设计》编程练习6.31(财务应用程序:信用卡号的合法性)...
6.31(财务应用程序:信用卡号的合法性)信用卡号遵循下面的模式.一个信用卡号必须是13到16位的整数.它的开头必须是: 4,指Visa卡 5,指Master卡 37,指American Expres ...
- epubbuilder 过期_记者调查|浠水县思源实验学校向学生发过期牛奶,生产日期2019年12月14日...
楚天都市报11月2日讯(记者董淑健 通讯员魏学建) 生产日期2019年12月14日,保质期6个月.过期几个月的牛奶能喝吗?几天前,居然通过学校食堂发到了学生手中. 浠水县思源实验学校的一些学生家长对此 ...
- 关于服务器什么时候维护好8月20号,2019年8月20日定期维护公告
原标题:2019年8月20日定期维护公告 2019年8月20日定期维护公告 亲爱的玩家朋友: 为保证服务器的运行稳定和服务质量,<梦幻西游>所有服务器将于2019年8月20日上午8:00停 ...
最新文章
- LTE: 系统内移动性知识点总结
- 北航c语言简答题目汇总_2020下半年至2021年【化学/计算机/生物类】国际竞赛汇总!...
- Redis源码剖析(十二)--客户端和服务器
- Kinect学习(六):提取人体关节点数据
- 在WPF 4.5中跨线程更新集合
- 32、[源码]-AOP原理-创建AOP代理
- AC日记——幸运号码 51nod 1043
- rhel6mysql管理_RHEL 6平台MySQL数据库服务器的安装方法
- IBatisNet初步体验
- oracle生成awr报告命令,oracle数据库生成awr报告
- SQL Server2012版完全卸载
- wps excel 操作指南
- JavaScript登录界面制作
- 计算机右键管理删除,win10系统删除右键菜单中“管理我的手机”的处理方法
- 跳跃表skiplist简析
- 数据可视化笔记8 层次数据可视化
- 苏州Uber优步司机奖励政策(8月31日至9月6日)
- nacos2.X集群错误:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
- DOSBOX的简单使用
- ERR_REQUIRE_ESM
热门文章
- python爬虫网络安全的_基于Python网络爬虫实战 - 安全牛课堂 - 领先的信息安全在线教育平台...
- android ro.boot.mac,Android设备ro.boot.serialno的前世今生
- 【性能测试】功能简单的小说网站(Jmeter+fiddler实践)
- VSCODE 好看的亮色系主题,收藏起来
- 华为OD机试题 - 九宫格按键输入(JavaScript)| 机考必刷
- delphi cookie发送php,phpwind 论坛发贴POST提交!cookie 设置,该如何解决
- 还不知道音频格式转换mp3软件哪个好?进来看看就知道了
- uniapp 重力感应关闭
- linux 常用命令手册
- CentOS 8.0 安装docker 报错:Problem package docker-ce-3 19.03.4-3.el7.x86_64 require