如何检查IBAN验证



如何验证Java中的Iban(国际银行帐号)以在Android应用中使用?

国际银行帐号是国际商定的系统,用于识别跨国家边界的银行帐户,以促进跨境交易的沟通和处理,并降低了转录错误的风险。

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

另外,长时间太小而无法容纳数字。您需要一个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);
}