- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要验证信用卡号。
当我用谷歌搜索时,我找到了 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;
}
我想知道,
最佳答案
我很久以前就这样做了,对不起,代码是用 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/
由于数字也可以是小数,这让我认为 CC 数字应该是整数。这是有道理的,因为我认为任何信用卡都不会以 0 开头,而且它们都遵循相同的模式: 4444333322221111 所以我猜它们是一个整数,但我
有没有办法让 paypal 在后台处理我的信用卡,而无需用户离开我的网站或拥有 paypal 帐户? 或者此功能仅适用于“Pro”帐户? 谢谢。 最佳答案 这也适用于普通帐户。 直接支付用户体验 直接
有没有人有任何使用信用卡文件服务的经验,处理信用卡信息的存储以进行持续购买? 我们正在寻找一种解决方案,该解决方案可以通过 Web 服务或类似服务与自定义 ASP.NET 应用程序集成,但从我们这边移
我想知道如何在不使用 Apple 的应用内购买机制的情况下向用户询问信用卡详细信息并向他收费。 我的想法是将用户的信用卡发布到我的在线信用计费系统,并在网站上进行交易,在后台进行交易,然后将交易结果报
我想对 Guest Checkout 用户使用 Paypal 定期付款。也就是说,用户可以在没有任何 Paypal 帐户的情况下订阅我的计划。他也不需要创建 Paypal 帐户。只有他/她的信用卡 最
我在我的网站中集成了 NVP 方法,使用信用卡和 PayPal 进行定期付款。 完成付款后,新的用户资料将在商家的 PayPal 帐户中创建。但立即在 PayPal 网站中添加了第二行,显示配置文件的
当用户直接付款时(以客人身份购买 - 用信用卡付款),默认情况下,用户需要在转到信用卡号、csc 等之前填写信用卡帐单地址和电话号码。实际上我不需要真的想要账单地址,我可以直接将用户指向信用卡号,cs
通常,作为一个普通的应用程序,使用 active-merchant 和任何支付网关,我们提供一个基本的表格来填写属性: cc = CreditCard.new( :first_name => 'S
我使用的 iFrame 托管在另一个具有 SSL 证书的域上。在使用 iFrame 的页面上,我在 Google Chrome 的域旁边收到“不安全”消息,并在控制台日志中收到以下警告: This p
在我的 RoR 应用程序中存储我的客户的信用卡和账单信息的最佳做法是什么? 实际上,我正在使用 ruby 1.9.2、Rails 3.2.3,我正在考虑在 Heroku 中部署我的应用程序。 我们
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 11年前关闭。 Improve this qu
这是一个关于信用卡处理的问题。我们正在使用 AVS 并发现每笔因 AVS 失败的交易都会导致保留客户卡上的总金额。多次失败意味着多次保留。 发生这种情况是因为仅在 AUTH 完成后才检查 AVS。因此
假设我们有一个适用于手机的应用程序。制作此应用程序的原因之一是在特定网站的交付最后步骤中插入用户的一些关键信息,而这些信息并非来自应用程序创建者。它填写了地址、信用卡和真实姓名。在该网站购买商品后,应
我终于想出了如何使用这个 tutorial 实现 Stripes Monthly Billing 目前我的#new_subscription 表单和编辑表单的提交按钮创建信用卡数据并将其发送到 Str
我在 PayPal Pro/Express Omnipay Gateway 上测试沙盒信用卡时遇到问题。我正在使用在 Laravel 上运行的 October CMS,据我所知,它使用 Laravel
我希望用户能够通过 Windows Phone 应用程序购买门票,并且不想为此目的使用网络浏览器。票价可能不同。 是否可以通过电子钱包应用程序处理付款或需要与某些处理系统集成? 另请建议在 Windo
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我是一名优秀的程序员,十分优秀!