code: @Override
    public final boolean isValid(final Object pvalue, final ConstraintValidatorContext pcontext) {
      final String valueAsString = Objects.toString(pvalue, null);
      if (StringUtils.isEmpty(valueAsString)) {
        // empty field is ok
        return true;
      }
      if (valueAsString.length() < IBAN_LENGTH_MIN || valueAsString.length() > IBAN_LENGTH_MAX) {
        // to short or to long, but it's handled by size validator!
        return true;
      }
      final String countryCode = valueAsString.substring(0, 2);
      final IbanLengthDefinition validIbanLength = IBAN_LENGTH_MAP.ibanLengths().get(countryCode);
      if (validIbanLength == null || valueAsString.replaceAll("\\s", StringUtils.EMPTY)
          .length() != validIbanLength.getLength()) {
        // unknown country or wrong length for the country!
        return false;
      }
      if (!valueAsString.matches("^[A-Z]{2}[0-9A-Z]{2} ([0-9A-Z]{4}[ ])+[0-9A-Z]{1,4}$")) {
        // wrong format
        return false;
      }
  
      return CHECK_IBAN.isValid(IbanUtil.ibanCompress(valueAsString));
    }
docs: {@inheritDoc} check if given string is a valid IBAN.
  
  @see javax.validation.ConstraintValidator#isValid(java.lang.Object,
  javax.validation.ConstraintValidatorContext)