static CodeValidator createRangeValidator()

in src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java [290:330]


    static CodeValidator createRangeValidator(final CreditCardRange[] creditCardRanges, final CheckDigit digitCheck) {
        return new CodeValidator(
                // must be numeric (rest of validation is done later)
                new RegexValidator("(\\d+)") {
                    private static final long serialVersionUID = 1L;
                    private final transient CreditCardRange[] ccr = creditCardRanges.clone();

                    @Override
                    public boolean isValid(final String value) {
                        return validate(value) != null;
                    }

                    @Override
                    public String[] match(final String value) {
                        return new String[] { validate(value) };
                    }

                    @Override
                    // must return full string
                    public String validate(final String value) {
                        if (super.match(value) != null) {
                            final int length = value.length();
                            for (final CreditCardRange range : ccr) {
                                if (validLength(length, range)) {
                                    if (range.high == null) { // single prefix only
                                        if (value.startsWith(range.low)) {
                                            return value;
                                        }
                                    } else if (range.low.compareTo(value) <= 0 // no need to trim value here
                                            &&
                                    // here we have to ignore digits beyond the prefix
                                            range.high.compareTo(value.substring(0, range.high.length())) >= 0) {
                                        return value;
                                    }
                                }
                            }
                        }
                        return null;
                    }
                }, digitCheck);
    }