Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IBAN Validation check

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.

  1. Check that the total IBAN length is correct as per the country. If not, the IBAN is invalid

  2. Move the four initial characters to the end of the string

  3. Replace each letter in the string with two digits, thereby expanding the string, where A = 10, B = 11, ..., Z = 35

  4. 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"));
like image 457
pmillio Avatar asked Feb 21 '14 07:02

pmillio


People also ask

How do I validate my IBAN?

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.

What is IBAN number of HBL?

​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.

How do I generate IBAN number?

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.


2 Answers

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>
like image 179
MaVRoSCy Avatar answered Sep 19 '22 15:09

MaVRoSCy


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.

like image 35
Laurent VB Avatar answered Sep 21 '22 15:09

Laurent VB