gpt4 book ai didi

java - java的信用卡 validator

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:48 24 4
gpt4 key购买 nike

我需要验证信用卡号。

当我用谷歌搜索时,我找到了 org.apache.commons.validator.CreditCardValidator。但似乎它无法正常工作。当我传递一个非数字字符时,它也提供 true。

Apache 代码 CreditCardValidator :

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

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

CardType validator (如果卡类型无效则为 null)

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 validator 。

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;
}

我想知道,

  1. 是否有任何其他第三方类来验证信用卡除了 org.apache 之外?
  2. 我的代码有问题吗?(我测试了好几次。到目前为止一切顺利。我只是想知道如果你能发现我没有发现的东西。)

引用资料: How do you detect Credit card type based on number?

最佳答案

我很久以前就这样做了,对不起,代码是用 C 语言编写的。易于转换。希望这对您有所帮助。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int CardNoChecker(unsigned long long int Number)
{
int dijts=0;
int Ans=0;
{
unsigned long long int k=1;
while(Number%k!=Number)
{
dijts=dijts+1;
k=k*10;
}
}
{
int i=1;
int Product=0;
int Sum=0;
for(i=dijts;i>=1;i--)
{
if(i%2==0)
{
if((Number%10)*2<10)
Product = Product + ( Number % 10 ) * 2 ;
else
{
int No=(Number%10)*2;
Product = Product + No/10;
Product = Product + No%10;
}
}
else
{
Sum = Sum + ( Number % 10 ) ;
}
Number=Number /10;
}
Ans = Sum + Product ;
}
if(Ans%10==0)
return (1);
else
return (0);
}

int main()
{
unsigned long long int CardNO;
int valid=0;
while(!valid)
{
int CnV=0;
int VC=0;
int AE=0;
int MC=0;
printf("Enter Card NO : ");
scanf("%llu",&CardNO);
if(CardNO/1000000000000==4 || CardNO/1000000000000000==4)
{
VC=1;
}
else if(CardNO/10000000000000==34 ||CardNO/10000000000000==37)
{
AE=1;
}
else if(CardNO/100000000000000==51 || CardNO/100000000000000==52 || CardNO/100000000000000==53 || CardNO/100000000000000==54 || CardNO/100000000000000==55)
{
MC=1;
}
CnV=CardNoChecker(CardNO);
if(CnV && MC )
printf("This is a Valid Master Card\n\n");
else if(CnV && VC )
printf("This is a Valid Visa Card\n\n");
else if(CnV && AE )
printf("This is a Valid American Express Card\n\n");
else
printf("Card is Not Valid'\n\n");
}

return (0);
}

关于java - java的信用卡 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com