java实现luhn算法 银行卡校验算法

Luhn算法。银行卡校验算法。java版。

如下java代码。测试代码已经卸载main函数中。

/**
 * @Author GW
 * @Version 1.0
 * @Description Luhn算法。银行卡校验算法。没做字符串数字校验,以后再做吧!
 * @since 2020/12/4 20:49
 */
public class Luhn {

    public static void main(String[] args) {
        String str="7992739871";
        String strValue=Luhn.addCheck(str);
        System.out.println(strValue);

        if (check(strValue)){
            System.out.println("校验成功");
        }else {
            System.out.println("校验失败");
        }
    }

    /**
     * 数字字符串添加校验位
     * @param digits 不带校验位的数字字符串
     * @return 添加校验位的字符串
     */
    public static String addCheck(String digits){
        return digits+getCheck(digits);
    }

    /**
     * 检查校验位
     * @param digits 带校验位的字符串
     * @return 检查结果
     */
    private static boolean check(String digits) {
        return check(numStringToArray(digits));
    }

    /**
     * 获取校验位
     * @param digits 不带校验位的字符串
     * @return 校验位
     */
    private static int getCheck(String digits) {
        return getCheck(numStringToArray(digits));
    }

    //------------------------辅助函数---------------------//

    private static Integer[] numStringToArray(String numStr){
        byte[] bytes=numStr.getBytes();
        List<Integer> list=new ArrayList<>();
        for (byte b:bytes){
            list.add((int) b-48);
        }
        Integer[] digits=new Integer[list.size()];
        list.toArray(digits);
        return digits;
    }

    private static boolean check(Integer[] digits) {
        int sum = 0;
        int length = digits.length;
        for (int i = 0; i < length; i++) {

            int digit = digits[length - i - 1];

            if (i % 2 == 1) {
                digit *= 2;
            }
            sum += digit > 9 ? digit - 9 : digit;
        }
        return sum % 10 == 0;
    }

    private static int getCheck(Integer[] digits) {
        int sum = 0;
        int length = digits.length;
        for (int i = 0; i < length; i++) {
            int digit = digits[length - i - 1];
            if (i % 2 == 0) {
                digit *= 2;
            }
            sum += digit > 9 ? digit - 9 : digit;
        }
        return sum * 9 % 10;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值