信用卡校验位算法THE LUHN MOD-10

信用卡校验位算法THE LUHN MOD-10 [url]http://blogread.cn/it/article/6324?f=wb[/url]



import org.apache.commons.lang3.StringUtils;

public class CreditCardValidator {

/**
* 1. 对卡号上的每位数字乘以权重。其规则是,如果卡号数字个数是偶数,则第一位乘以2,否则就乘以1,然后以后分别是,1,2,1,2,1,2;
*
* 2. 如果每位数字乘以权重后超过9 ,则需要减去 9;
*
* 3. 将所有的处理过的加权数字求和,用 数字 10 求模运算;
*
* 4. 余数应该是0,否则可能是输入错误。也可能是一个假号。
*
* @param cardNo
* @return
*/
public static boolean isValid(String cardNo) {
if (StringUtils.isBlank(cardNo) || !StringUtils.isNumeric(cardNo))
return false;
int len = cardNo.length();
boolean isOdd = len % 2 == 1;
int total = 0;
int tem = 0;
for (int i = 0; i < len; i++) {
tem = Integer.valueOf(String.valueOf(cardNo.charAt(i)));
if (i == 0 && !isOdd) {

tem = tem << 1;

} else if (i > 0 && i % 2 == 0) {

tem = tem << 1;

}

if (tem > 9)
tem = tem - 9;
total = total + tem;
}
return total % 10 == 0;
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值