信用卡验证java_java - 信用卡验证器的java - SO中文参考 - www.soinside.com

本文介绍了如何使用Java实现信用卡验证,包括根据卡类型进行匹配的正则表达式和应用Luhn算法的CardNumber验证器。虽然作者尝试了Apache Commons的CreditCardValidator,但在某些情况下表现不理想,因此自定义了验证方法。作者询问是否有其他第三方库可用于信用卡验证,并邀请读者审查代码可能存在的问题。
摘要由CSDN通过智能技术生成

我需要做一个信用卡号验证。

当我上网搜索时,我发现 org.apache.commons.validator.CreditCardValidator. 但似乎它不能正常工作,当我传递一个非数字字符时,它也提供了true。String ccNumber = "378282246310005";

CreditCardValidator creditCardValidator = new CreditCardValidator();

if(!creditCardValidator.isValid(ccNumber)) throw new Exception("Credit Card Number is not a valid one!");

然后,我写了以下方法来根据卡的类型和卡号来验证信用卡号码(使用luhn的算法)。

CardType验证器(如果是无效的卡类型,则为空)。public String getCCType(String ccNumber){

String visaRegex = "^4[0-9]{12}(?:[0-9]{3})?$";

String masterRegex = "^5[1-5][0-9]{14}$";

String amexRegex = "^3[47][0-9]{13}$";

String dinersClubrRegex = "^3(?:0[0-5]|[68][0-9])[0-9]{11}$";

String discoverRegex = "^6(?:011|5[0-9]{2})[0-9]{12}$";

String jcbRegex = "^(?:2131|1800|35\\d{3})\\d{11}$";

String commonRegex = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$";

try {

ccNumber = ccNumber.replaceAll("\\D", "");

return (ccNumber.matches(visaRegex) ? "VISA" : ccNumber.matches(masterRegex) ? "MASTER" :ccNumber.matches(amexRegex) ? "AMEX" :ccNumber.matches(dinersClubrRegex) ? "DINER" :ccNumber.matches(discoverRegex) ? "DISCOVER" :ccNumber.matches(jcbRegex) ? "JCB":null);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

使用Luhn算法的CardNumber验证器。public boolean isValidCardNumber(String ccNumber){

try {

ccNumber = ccNumber.replaceAll("\\D", "");

char[] ccNumberArry = ccNumber.toCharArray();

int checkSum = 0;

for(int i = ccNumberArry.length - 1; i >= 0; i--){

char ccDigit = ccNumberArry[i];

if((ccNumberArry.length - i) % 2 == 0){

int doubleddDigit = Character.getNumericValue(ccDigit) * 2;

checkSum += (doubleddDigit % 9 == 0 && doubleddDigit != 0) ? 9 : doubleddDigit % 9;

}else{

checkSum += Character.getNumericValue(ccDigit);

}

}

return (checkSum != 0 && checkSum % 10 == 0);

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

我想知道。除了org.apache这个类,还有其他第三方类来验证信用卡吗?

我的代码有什么问题吗? (我测试了几次。到目前为止还不错。我只是想知道,如果你能发现一些我没有发现的东西的话。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值