Luhn算法

目录

1.简介与描述

2.代码实现

其他

参考文档


1.简介与描述

        Luhn算法(Luhn algorithm),也称为“模10”(Mod 10)算法,是一种简单的校验和算法,一般用于验证身份识别码,例如发卡行识别码、国际移动设备辨识码(IMEI),美国国家提供商标识号码,或是加拿大社会保险号码。该算法由IBM科学家Hans Peter Luhn创造,专利于1954年1月6日申请。 该算法现已属于公有领域并得到了广泛的应用,例如ISO/IEC 7812-1。它不是一种安全的加密哈希函数,设计它的目的只是防止意外出错而不是恶意攻击

        该校验的过程:

        1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

        2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

        3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432 1234 5678 8881

        奇数位分布:4,2,2,4,6,8,8,1

        奇数位和=35;

        偶数位分布(乘2,如果为两位数以减去9):1,6,2,6,1,5,7,7

        偶数位和=35。

        最后35+35=70可以被10整除,认定校验通过。

2.代码实现

public static boolean check(int[] 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;
}

其他

        ISBN国际标准书号和我国的身份证号码,也有类似的校验方式。其中ISBN包含10个数字,我国身份证(二代)为18位,都是使用最后一位作为校验位,也即最后一位是可以基于前面的数字进行推断。具体可参考“ISBN、一个18位身份证和计算信用卡(Luhns)的算法,ISBN、一个18位身份证和计算信用卡(Luhns)的算法_ivbapplication的专栏-CSDN博客”。

参考文档

Luhn算法_百度百科,Luhn算法_百度百科

银行卡校验规则(Luhn算法),银行卡校验规则(Luhn算法)_ywt_go的专栏-CSDN博客_luhn算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值