I need to do an IBAN validation check using JavaScript. The rules I need to follow are:
Validating the IBAN An IBAN is validated by converting it into an integer and performing a basic mod-97 operation (as described in ISO 7064) on it. If the IBAN is valid, the remainder equals 1.
Check that the total IBAN length is correct as per the country. If not, the IBAN is invalid
Move the four initial characters to the end of the string
Replace each letter in the string with two digits, thereby expanding the string, where A = 10, B = 11, ..., Z = 35
Interpret the string as a decimal integer and compute the remainder of that number on division by 97
I am doing this for a Belarusian IBAN so it has to follow the following format
2C 31N -
RU1230000000000000000000000000000
How do I modify the following to meet the above rules;
function validateIBAN(iban) { var newIban = iban.toUpperCase(), modulo = function(divident, divisor) { var cDivident = ''; var cRest = ''; for (var i in divident) { var cChar = divident[i]; var cOperator = cRest + '' + cDivident + '' + cChar; if (cOperator < parseInt(divisor)) { cDivident += '' + cChar; } else { cRest = cOperator % divisor; if (cRest == 0) { cRest = ''; } cDivident = ''; } } cRest += '' + cDivident; if (cRest == '') { cRest = 0; } return cRest; }; if (newIban.search(/^[A-Z]{2}/gi) < 0) { return false; } newIban = newIban.substring(4) + newIban.substring(0, 4); newIban = newIban.replace(/[A-Z]/g, function(match) { return match.charCodeAt(0) - 55; }); return parseInt(modulo(newIban, 97), 10) === 1; } console.log(validateIBAN("RU1230000000000000000000000000000"));
Validating the IBAN An IBAN is validated by converting it into an integer and performing a basic mod-97 operation (as described in ISO 7064) on it. If the IBAN is valid, the remainder equals 1.
IBAN is the acronym for ISO 13616 standard compliant International Bank Account Number. IBAN is a unique customer account number which can be used confidently in making or receiving payments (excluding checks and credit cards) within the country as well as abroad.
Look in the top right corner of your paper statement, as many banks provide the IBAN number in that spot. Use an online calculator. There are many calculators online which will convert a bank account to an IBAN. Input the Bank's code and the account number.
Based on the work of http://toms-cafe.de/iban/iban.js I have developed my version of IBAN check.
You can modify the country support by modifying the variable CODE_LENGTHS
.
Here is my implementation:
function alertValidIBAN(iban) { alert(isValidIBANNumber(iban)); } /* * Returns 1 if the IBAN is valid * Returns FALSE if the IBAN's length is not as should be (for CY the IBAN Should be 28 chars long starting with CY ) * Returns any other number (checksum) when the IBAN is invalid (check digits do not match) */ function isValidIBANNumber(input) { var CODE_LENGTHS = { AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29, CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24, FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21, HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28, LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27, MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29, RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26, AL: 28, BY: 28, CR: 22, EG: 29, GE: 22, IQ: 23, LC: 32, SC: 31, ST: 25, SV: 28, TL: 23, UA: 29, VA: 22, VG: 24, XK: 20 }; var iban = String(input).toUpperCase().replace(/[^A-Z0-9]/g, ''), // keep only alphanumeric characters code = iban.match(/^([A-Z]{2})(\d{2})([A-Z\d]+)$/), // match and capture (1) the country code, (2) the check digits, and (3) the rest digits; // check syntax and length if (!code || iban.length !== CODE_LENGTHS[code[1]]) { return false; } // rearrange country code and check digits, and convert chars to ints digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) { return letter.charCodeAt(0) - 55; }); // final check return mod97(digits); } function mod97(string) { var checksum = string.slice(0, 2), fragment; for (var offset = 2; offset < string.length; offset += 7) { fragment = String(checksum) + string.substring(offset, offset + 7); checksum = parseInt(fragment, 10) % 97; } return checksum; }
input { width:300px; }
Enter IBAN <input type="test" id="iban"/> <button onclick="alertValidIBAN(null);">check IBAN</button>
You can use this library to validate and format an IBAN: https://github.com/arhs/iban.js (disclaimer: I wrote the library)
However, neither Russia nor Belarus are supported, as I can't find any mention of those countries on the IBAN page of wikipedia nor in the official IBAN registry so I'm afraid you'll have to modify the library code yourself to add it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With