当前位置:编程学习 > JAVA >>

输入银行卡号码

[java]
package cn.dlpu.lby; 
 
import java.util.Scanner; 
 
public class Xinyongkahaoma { 
 
    /*
    当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,
    因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
    该校验的过程:
    1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
    2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
    3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
    例如,卡号是:5432123456788881
    则奇数、偶数位(用红色标出)分布:5432123456788881
    奇数位和=35
    偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
    最后35+35=70 可以被10整除,认定校验通过。
    请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
    比如,用户输入:356827027232780
    程序输出:成功
    */ 
 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub  
        Scanner sc = new Scanner(System.in); 
        String str = sc.nextLine(); 
        char[] cc = str.toCharArray(); 
        cal(cc); 
    } 
    //将字符串存到数组中  
    private static void cal(char[] cc) { 
        // TODO Auto-generated method stub  
        int[] n = new int[cc.length+1]; 
        int j =1; 
        for(int i = cc.length-1;i>=0;i--){ 
            n[j++] = cc[i]-'0'; 
        } 
        if(test(n)) 
            System.out.println("成功!"); 
        else 
            System.out.println("失败!"); 
         
    } 
    //判断是否合理  
    private static boolean test(int[] n) { 
        // TODO Auto-generated method stub  
        int even = 0; 
        int odd = 0; 
        for(int i = 1;i<n.length;i++){ 
            if(i%2 == 0){ 
                int temp = n[i]*2; 
                if(temp<10){ 
                    even += temp; 
                } 
                 
                else{ 
                    temp = temp-9; 
                    even += temp; 
                } 
            } 
             
            else{ 
                odd += n[i]; 
            } 
        } 
         
        int total = even + odd; 
        if(total%10 == 0) 
            return true; 
        return false; 
         
    } 
 

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,