[
https://issues.apache.org/jira/browse/WICKET-5891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Grigorov resolved WICKET-5891.
-------------------------------------
Resolution: Fixed
Fix Version/s: 7.0.0-M6
6.20.0
> Parsing of ChinUnionPay credit card should use the first 6 characters
> ---------------------------------------------------------------------
>
> Key: WICKET-5891
> URL: https://issues.apache.org/jira/browse/WICKET-5891
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 6.19.0
> Reporter: Martin Grigorov
> Assignee: Martin Grigorov
> Fix For: 6.20.0, 7.0.0-M6
>
>
> User report:
> A China UnionPay number has to start with 622 (622126-622925) and has to have
> a length between 16 and 19. The source code of CreditCardValidator is:
> 220 private boolean isChinaUnionPay(String creditCardNumber)
> 221 {
> 222 cardId = CreditCardValidator.INVALID;
> 223 boolean returnValue = false;
> 224
> 225 if ((creditCardNumber.length() >= 16 &&
> creditCardNumber.length() <= 19) &&
> 226 (creditCardNumber.startsWith("622")))
> 227 {
> 228 int firstDigits =
> Integer.parseInt(creditCardNumber.substring(0, 5));
> 229 if (firstDigits >= 622126 && firstDigits <=
> 622925)
> 230 {
> 231 cardId =
> CreditCardValidator.CHINA_UNIONPAY;
> 232 returnValue = true;
> 233 }
> 234 }
> 235
> 236 return returnValue;
> 237 }
> The problem is on the line 228 because the substring returns the first 5
> digits and it is compared to 6 digits, so "firstDigits" is always < than
> 622126. The fix is to do #substring(0, 6).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)