/* * This file is part of Bitsquare. * * Bitsquare is free software: you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at * your option) any later version. * * Bitsquare is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public * License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. */ package io.bitsquare.gui.util.validation; import java.util.Locale; /* * BIC information taken from German wikipedia (2017-01-30) * * length 8 or 11 characters * General format: BBBB CC LL (bbb) * with B - Bank code * C - Country code * L - Location code * b - branch code (if applicable) * * B and C must be letters * first L cannot be 0 or 1, second L cannot be O (upper case 'o') * bbb cannot begin with X, unless it is XXX */ // TODO Special letters like ä, å, ... are not detected as invalid public final class BICValidator extends InputValidator { /////////////////////////////////////////////////////////////////////////////////////////// // Public methods /////////////////////////////////////////////////////////////////////////////////////////// @Override public ValidationResult validate(String input) { // TODO Add validation for primary and secondary IDs according to the selected type // IBAN max 34 chars // bic: 8 or 11 chars // check ensure length 8 or 11 if (!isStringWithFixedLength(input,8) && !isStringWithFixedLength(input,11)) return new ValidationResult(false, "Input length is neither 8 nor 11"); input = input.toUpperCase(Locale.ROOT); // ensure Bank and Contry code to be letters only for (int k=0; k<6; k++) { if (!Character.isLetter(input.charAt(k))) return new ValidationResult(false, "Bank and Country code must be letters"); } // ensure location code starts not with 0 or 1 and ends not with O char ch = input.charAt(6); if (ch == '0' || ch == '1' || input.charAt(7) == 'O') return new ValidationResult(false, "BIC contains invalid location code"); // check complete for 8 char BIC if (input.length() == 8) return new ValidationResult(true); // ensure branch code does not start with X unless it is XXX if (input.charAt(8) == 'X') if (input.charAt(9) != 'X' || input.charAt(10) != 'X') return new ValidationResult(false, "BIC contains invalid branch code"); return new ValidationResult(true); } /////////////////////////////////////////////////////////////////////////////////////////// // Private methods /////////////////////////////////////////////////////////////////////////////////////////// }