[ 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)