diff --git a/packages/web3-eth-iban/src/index.js b/packages/web3-eth-iban/src/index.js
index 6fdbc99fcb8..3e79e1ee544 100644
--- a/packages/web3-eth-iban/src/index.js
+++ b/packages/web3-eth-iban/src/index.js
@@ -25,12 +25,12 @@
"use strict";
-var utils = require('web3-utils');
-var BigNumber = require('bn.js');
+const utils = require('web3-utils');
+const BigNumber = require('bn.js');
-var leftPad = function (string, bytes) {
- var result = string;
+const leftPad = function (string, bytes) {
+ let result = string;
while (result.length < bytes * 2) {
result = '0' + result;
}
@@ -45,16 +45,16 @@ var leftPad = function (string, bytes) {
* @param {String} iban the IBAN
* @returns {String} the prepared IBAN
*/
-var iso13616Prepare = function (iban) {
- var A = 'A'.charCodeAt(0);
- var Z = 'Z'.charCodeAt(0);
+const iso13616Prepare = function (iban) {
+ const A = 'A'.charCodeAt(0);
+ const Z = 'Z'.charCodeAt(0);
iban = iban.toUpperCase();
iban = iban.substr(4) + iban.substr(0,4);
- return iban.split('').map(function(n){
- var code = n.charCodeAt(0);
- if (code >= A && code <= Z){
+ return iban.split('').map(function(n) {
+ const code = n.charCodeAt(0);
+ if (code >= A && code <= Z) {
// A = 10, B = 11, ... Z = 35
return code - A + 10;
} else {
@@ -70,9 +70,9 @@ var iso13616Prepare = function (iban) {
* @param {String} iban
* @returns {Number}
*/
-var mod9710 = function (iban) {
- var remainder = iban,
- block;
+const mod9710 = function (iban) {
+ let remainder = iban;
+ let block;
while (remainder.length > 2){
block = remainder.slice(0, 9);
@@ -87,181 +87,183 @@ var mod9710 = function (iban) {
*
* @param {String} iban
*/
-var Iban = function Iban(iban) {
- this._iban = iban;
-};
-
-/**
- * This method should be used to create an ethereum address from a direct iban address
- *
- * @method toAddress
- * @param {String} iban address
- * @return {String} the ethereum address
- */
-Iban.toAddress = function (ib) {
- ib = new Iban(ib);
-
- if(!ib.isDirect()) {
- throw new Error('IBAN is indirect and can\'t be converted');
+class Iban {
+ constructor (iban) {
+ this._iban = iban;
}
- return ib.toAddress();
-};
-
-/**
- * This method should be used to create iban address from an ethereum address
- *
- * @method toIban
- * @param {String} address
- * @return {String} the IBAN address
- */
-Iban.toIban = function (address) {
- return Iban.fromAddress(address).toString();
-};
+ /**
+ * This method should be used to create an ethereum address from a direct iban address
+ *
+ * @method toAddress
+ * @param {String} iban address
+ * @return {String} the ethereum address
+ */
+ static toAddress (ib) {
+ ib = new Iban(ib);
+
+ if(!ib.isDirect()) {
+ throw new Error('IBAN is indirect and can\'t be converted');
+ }
-/**
- * This method should be used to create iban object from an ethereum address
- *
- * @method fromAddress
- * @param {String} address
- * @return {Iban} the IBAN object
- */
-Iban.fromAddress = function (address) {
- if(!utils.isAddress(address)){
- throw new Error('Provided address is not a valid address: '+ address);
+ return ib.toAddress();
}
- address = address.replace('0x','').replace('0X','');
-
- var asBn = new BigNumber(address, 16);
- var base36 = asBn.toString(36);
- var padded = leftPad(base36, 15);
- return Iban.fromBban(padded.toUpperCase());
-};
-
-/**
- * Convert the passed BBAN to an IBAN for this country specification.
- * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account".
- * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
- *
- * @method fromBban
- * @param {String} bban the BBAN to convert to IBAN
- * @returns {Iban} the IBAN object
- */
-Iban.fromBban = function (bban) {
- var countryCode = 'XE';
-
- var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
- var checkDigit = ('0' + (98 - remainder)).slice(-2);
-
- return new Iban(countryCode + checkDigit + bban);
-};
-
-/**
- * Should be used to create IBAN object for given institution and identifier
- *
- * @method createIndirect
- * @param {Object} options, required options are "institution" and "identifier"
- * @return {Iban} the IBAN object
- */
-Iban.createIndirect = function (options) {
- return Iban.fromBban('ETH' + options.institution + options.identifier);
-};
-
-/**
- * This method should be used to check if given string is valid iban object
- *
- * @method isValid
- * @param {String} iban string
- * @return {Boolean} true if it is valid IBAN
- */
-Iban.isValid = function (iban) {
- var i = new Iban(iban);
- return i.isValid();
-};
-
-/**
- * Should be called to check if iban is correct
- *
- * @method isValid
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isValid = function () {
- return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
- mod9710(iso13616Prepare(this._iban)) === 1;
-};
-
-/**
- * Should be called to check if iban number is direct
- *
- * @method isDirect
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isDirect = function () {
- return this._iban.length === 34 || this._iban.length === 35;
-};
+ /**
+ * This method should be used to create iban address from an ethereum address
+ *
+ * @method toIban
+ * @param {String} address
+ * @return {String} the IBAN address
+ */
+ static toIban (address) {
+ return Iban.fromAddress(address).toString();
+ }
-/**
- * Should be called to check if iban number if indirect
- *
- * @method isIndirect
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isIndirect = function () {
- return this._iban.length === 20;
-};
+ /**
+ * This method should be used to create iban object from an ethereum address
+ *
+ * @method fromAddress
+ * @param {String} address
+ * @return {Iban} the IBAN object
+ */
+ static fromAddress (address) {
+ if(!utils.isAddress(address)){
+ throw new Error('Provided address is not a valid address: '+ address);
+ }
-/**
- * Should be called to get iban checksum
- * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
- *
- * @method checksum
- * @returns {String} checksum
- */
-Iban.prototype.checksum = function () {
- return this._iban.substr(2, 2);
-};
+ address = address.replace('0x','').replace('0X','');
-/**
- * Should be called to get institution identifier
- * eg. XREG
- *
- * @method institution
- * @returns {String} institution identifier
- */
-Iban.prototype.institution = function () {
- return this.isIndirect() ? this._iban.substr(7, 4) : '';
-};
+ const asBn = new BigNumber(address, 16);
+ const base36 = asBn.toString(36);
+ const padded = leftPad(base36, 15);
+ return Iban.fromBban(padded.toUpperCase());
+ }
-/**
- * Should be called to get client identifier within institution
- * eg. GAVOFYORK
- *
- * @method client
- * @returns {String} client identifier
- */
-Iban.prototype.client = function () {
- return this.isIndirect() ? this._iban.substr(11) : '';
-};
+ /**
+ * Convert the passed BBAN to an IBAN for this country specification.
+ * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account".
+ * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
+ *
+ * @method fromBban
+ * @param {String} bban the BBAN to convert to IBAN
+ * @returns {Iban} the IBAN object
+ */
+ static fromBban (bban) {
+ const countryCode = 'XE';
+
+ const remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
+ const checkDigit = ('0' + (98 - remainder)).slice(-2);
+
+ return new Iban(countryCode + checkDigit + bban);
+ }
-/**
- * Should be called to get client direct address
- *
- * @method toAddress
- * @returns {String} ethereum address
- */
-Iban.prototype.toAddress = function () {
- if (this.isDirect()) {
- var base36 = this._iban.substr(4);
- var asBn = new BigNumber(base36, 36);
- return utils.toChecksumAddress(asBn.toString(16, 20));
+ /**
+ * Should be used to create IBAN object for given institution and identifier
+ *
+ * @method createIndirect
+ * @param {Object} options, required options are "institution" and "identifier"
+ * @return {Iban} the IBAN object
+ */
+ static createIndirect (options) {
+ return Iban.fromBban('ETH' + options.institution + options.identifier);
}
- return '';
-};
+ /**
+ * This method should be used to check if given string is valid iban object
+ *
+ * @method isValid
+ * @param {String} iban string
+ * @return {Boolean} true if it is valid IBAN
+ */
+ static isValid (iban) {
+ const i = new Iban(iban);
+ return i.isValid();
+ };
+
+ /**
+ * Should be called to check if iban is correct
+ *
+ * @method isValid
+ * @returns {Boolean} true if it is, otherwise false
+ */
+ isValid () {
+ return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
+ mod9710(iso13616Prepare(this._iban)) === 1;
+ };
+
+ /**
+ * Should be called to check if iban number is direct
+ *
+ * @method isDirect
+ * @returns {Boolean} true if it is, otherwise false
+ */
+ isDirect () {
+ return this._iban.length === 34 || this._iban.length === 35;
+ };
+
+ /**
+ * Should be called to check if iban number if indirect
+ *
+ * @method isIndirect
+ * @returns {Boolean} true if it is, otherwise false
+ */
+ isIndirect () {
+ return this._iban.length === 20;
+ };
+
+ /**
+ * Should be called to get iban checksum
+ * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
+ *
+ * @method checksum
+ * @returns {String} checksum
+ */
+ checksum () {
+ return this._iban.substr(2, 2);
+ };
+
+ /**
+ * Should be called to get institution identifier
+ * eg. XREG
+ *
+ * @method institution
+ * @returns {String} institution identifier
+ */
+ institution () {
+ return this.isIndirect() ? this._iban.substr(7, 4) : '';
+ };
+
+ /**
+ * Should be called to get client identifier within institution
+ * eg. GAVOFYORK
+ *
+ * @method client
+ * @returns {String} client identifier
+ */
+ client () {
+ return this.isIndirect() ? this._iban.substr(11) : '';
+ };
+
+ /**
+ * Should be called to get client direct address
+ *
+ * @method toAddress
+ * @returns {String} ethereum address
+ */
+ toAddress () {
+ if (this.isDirect()) {
+ const base36 = this._iban.substr(4);
+ const asBn = new BigNumber(base36, 36);
+ return utils.toChecksumAddress(asBn.toString(16, 20));
+ }
-Iban.prototype.toString = function () {
- return this._iban;
-};
+ return '';
+ };
+
+ toString () {
+ return this._iban;
+ };
+}
module.exports = Iban;