如何检查 IBAN 验证?

How to check IBAN validation?

如何验证 java 中的 IBAN(国际银行帐号)以用于 Android 应用程序?

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.

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;
}

实施这些步骤:https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN

还有,long太小了,装不下这个数。你需要一个 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);
}