1

How can I validate IBAN (International Bank Account Number) in java to use in Android Apps?

The International Bank Account Number is an internationally agreed system of identifying bank accounts across national borders to facilitate the communication and processing of cross border transactions with a reduced risk of transcription errors.

Alireza Noorali
  • 3,129
  • 2
  • 33
  • 80

2 Answers2

4
private boolean isIbanValid(String iban) {

    int IBAN_MIN_SIZE = 15;
    int IBAN_MAX_SIZE = 34;
    long IBAN_MAX = 999999999;
    long IBAN_MODULUS = 97;

    String trimmed = iban.trim();

    if (trimmed.length() < IBAN_MIN_SIZE || trimmed.length() > IBAN_MAX_SIZE) {
        return false;
    }

    String reformat = trimmed.substring(4) + trimmed.substring(0, 4);
    long total = 0;

    for (int i = 0; i < reformat.length(); i++) {

        int charValue = Character.getNumericValue(reformat.charAt(i));

        if (charValue < 0 || charValue > 35) {
            return false;
        }

        total = (charValue > 9 ? total * 100 : total * 10) + charValue;

        if (total > IBAN_MAX) {
            total = (total % IBAN_MODULUS);
        }
    }

    return (total % IBAN_MODULUS) == 1;
}
Alireza Noorali
  • 3,129
  • 2
  • 33
  • 80
0

To implement these steps: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN

Also, a long is too small to hold the number. You need a BigInteger.

private boolean isIbanValid(String iban) {
    // remove spaces
    iban = iban.replace("\\s", "");

    // make all uppercase
    iban = iban.toUpperCase();

    // check length - complicated, depends on country. Skipping for now.
    // https://en.wikipedia.org/wiki/International_Bank_Account_Number#Structure

    // move first four letters to the end
    iban = iban.substring(4) + iban.substring(0,4);

    // convert letters to digits
    String total = "";
    for (int i = 0; i < iban.length(); i++) {

        int charValue = Character.getNumericValue(iban.charAt(i));

        if (charValue < 0 || charValue > 35) {
            return false;
        }

        total += charValue;
    }

    // Make BigInteger and check if modulus 97 is 1 
    BigInteger totalInt = new BigInteger(total);
    return totalInt.mod(new BigInteger("97")).equals(BigInteger.ONE);
}
PotatoesFall
  • 345
  • 2
  • 7