luhn java_JAVA实现Luhn算法

该博客介绍了一个用JAVA实现的Luhn算法,用于校验信用卡号的有效性。通过定义BigNum类来处理大数,并实现了加一、显示、设置元素、Luhn校验等方法。在主函数中,读取用户输入的信用卡号字符串,将其转换为BigNum对象,然后进行Luhn校验,最后输出校验结果。
摘要由CSDN通过智能技术生成

import java.util.Scanner;

class BigNum{

int []num; //位数

public BigNum(){

num = new int[21];

for(int i = 0; i < num.length; i++) {

num[i] = 0;

}

}

public BigNum(int n) {

num = new int[n];

}

public boolean full() {

for(int i = 0; i < num.length; i++) {

if(num[i] != 9) {

return false;

}

}

return true;

}

public void plusOne() {

int tag = 0; //从最后一位开始加,如果其9,将其变为0,另高一位加一,

//如果高一位是9,其变为0,高一位加一一次类推直到全为9

//tag == 0说明从第0位开始

if(num[tag]!=9) {

num[tag]++;

return;

}else {

if(full()) return; //如果全为9则溢出

//关键算法。。进位操作

while(true) {

num[tag]=0;

tag++;

if(num[tag] != 9) {

num[tag]++;

return;

}

}

}

}

public void show() {

for(int i = num.length-1; i >-1; i--) {

System.out.print(num[i]);

}

System.out.println();

}

public void setElem(int pos, int n) {

num[pos] = n;

}

public boolean isLuhn() {

int OddPlus=0; //奇数位和,在数组中为偶数位和

int EvenPlus=0; //偶数位和,在数组中为奇数位和

for(int i = 0; i < num.length; i+=2) {

OddPlus+=num[i];

}

int num2=-999;

for(int i = 1; i < num.length; i+=2) {

num2 = num[i]*2;

if (num2>9) {

num2-=9;

}

EvenPlus+=num2;

}

OddPlus+=EvenPlus;

if (OddPlus%10==0) {

return true;

}

return false;

}

}

public class ComformCreditCard {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner scanner = new Scanner(System.in);

//输入字符串

String str = scanner.next();

//从字符串提取数字

BigNum bNum = new BigNum(str.length());

//放入数据

for (int j = 0; j < str.length(); j++) {

bNum.setElem(j, str.charAt(j)-48);

}

if (bNum.isLuhn()) {

System.out.print("成功");

}else {

System.out.print("失败");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值