zoukankan      html  css  js  c++  java
  • 银行卡验证

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    public class CheckBankNumber

    {

        //Description:  银行卡号Luhm校验

        //Luhm校验规则�?6位银行卡号(19位�?用):

        // 1.将未带校验位�?15(或18)位卡号从右依次编号 1 �?15�?8),位于奇数位号上的数字乘以 2�?

        // 2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字�?

        // 3.将加法和加上校验位能�?10 整除�?

        //�?��6�?

        //private  final static String strBin = "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";

        private final static String SUCCESS="true";

        private final static String BAD_LENGTH="银行卡号长度必须在6到9之间";

        private final static String NOT_NUMBER="银行卡必须全部为数字";

        private final static String ILLEGAL_NUMBER="银行卡不符合规则";

        public static String luhmCheck(String bankno)

        {

            if (bankno.length() < 16 || bankno.length() > 19)

            {

                return BAD_LENGTH;

            }

            Pattern pattern = Pattern.compile("[0-9]*");

            Matcher match = pattern.matcher(bankno);

            if (match.matches() == false) {

                return NOT_NUMBER;

            }

            int lastNum=Integer.parseInt(bankno.substring(bankno.length()-1,bankno.length()));

            String first15Num=bankno.substring(0,bankno.length()-1);

            //System.out.println(first15Num);

            char[] newArr = new char[first15Num.length()];    //倒叙装入newArr

            char[] tempArr = first15Num.toCharArray();

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

            {

                newArr[tempArr.length-1-i] = tempArr[i];

            }

            int[] arrSingleNum = new int[newArr.length]; 

            int[] arrSingleNum2 = new int[newArr.length];

            int[] arrDoubleNum=new int[newArr.length]; 

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

            {

                if((j+1)%2==1)

                {

                    if((int)(newArr[j]-48)*2<9)

                        arrSingleNum[j]=(int)(newArr[j]-48)*2;

                    else

                        arrSingleNum2[j]=(int)(newArr[j]-48)*2;

                }

                else

                    arrDoubleNum[j]=(int)(newArr[j]-48);

            }

            int[] arrSingleNumChild = new int[newArr.length]; //奇数�?2 >9 的分割之后的数组个位�?

            int[] arrSingleNum2Child = new int[newArr.length];//奇数�?2 >9 的分割之后的数组十位�?

            for(int h=0;h<arrSingleNum2.length;h++)

            {

                arrSingleNumChild[h] = (arrSingleNum2[h])%10;

                arrSingleNum2Child[h] = (arrSingleNum2[h])/10;

            }   

            int sumSingleNum=0; 

            int sumDoubleNum=0;

            int sumSingleNumChild=0; 

            int sumSingleNum2Child=0; 

            int sumTotal=0;

            for(int m=0;m<arrSingleNum.length;m++)

            {

                sumSingleNum=sumSingleNum+arrSingleNum[m];

            }

            for(int n=0;n<arrDoubleNum.length;n++)

            {

                sumDoubleNum=sumDoubleNum+arrDoubleNum[n];

            }

            for(int p=0;p<arrSingleNumChild.length;p++)

            {

                sumSingleNumChild=sumSingleNumChild+arrSingleNumChild[p];

                sumSingleNum2Child=sumSingleNum2Child+arrSingleNum2Child[p];

            }     

            sumTotal=sumSingleNum+sumDoubleNum+sumSingleNumChild+sumSingleNum2Child;

            int k= sumTotal%10==0?10:sumTotal%10;       

            int luhm= 10-k;

            if(lastNum == luhm)

            {

                return SUCCESS;//验证通过

            }

            else

            {

                return ILLEGAL_NUMBER;

            }     

        }

        public static void main(String[] args) {

            String bankno = "4096708281160908";

            System.out.println(bankno+":"+luhmCheck(bankno));

            String bankno1 = "4096708281160909";

            System.out.println(bankno1+":"+luhmCheck(bankno1));

            String bankno2 = "4296708281160908";

            System.out.println(bankno2+":"+luhmCheck(bankno2));

        }

    }

  • 相关阅读:
    [转]给C++初学者的50个忠告
    [转]代理模式——代理模式的核心思想
    [转]单例模式——C++实现自动释放单例类的实例
    [转]代理模式——何时使用代理模式
    观察者模式——生动的气象信息订阅服务图示
    [转]单例模式——Java中互斥访问单一实例
    [转]C++ const变量使用技巧总结
    [转]用C++设计一个不能被继承的类
    ExtJs2.0学习系列(14)Ext.TreePanel之第三式(可增删改的树)
    ExtJs2.0学习系列(7)Ext.FormPanel之第四式(其他组件示例篇)
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10400438.html
Copyright © 2011-2022 走看看