aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoDEmanX <[email protected]>2016-04-07 11:31:33 +0200
committerCoDEmanX <[email protected]>2016-04-07 14:14:46 +0200
commit94b65cbf334ea5ef1c4838711bc0945125f7c779 (patch)
tree020ce2b1eec3e949ce8658ebe85bf83255453ae8
parent38e890eeced869b41cf0047ef28740bfb79d1c01 (diff)
downloadfaker-94b65cbf334ea5ef1c4838711bc0945125f7c779.tar.xz
faker-94b65cbf334ea5ef1c4838711bc0945125f7c779.zip
Add IBAN and BIC generator functions
-rw-r--r--lib/finance.js66
-rw-r--r--lib/helpers.js6
-rw-r--r--lib/iban.js1136
-rw-r--r--lib/index.js2
-rw-r--r--test/finance.unit.js22
5 files changed, 1227 insertions, 5 deletions
diff --git a/lib/finance.js b/lib/finance.js
index 07eaa98b..68bb674b 100644
--- a/lib/finance.js
+++ b/lib/finance.js
@@ -3,6 +3,7 @@
* @namespace faker.finance
*/
var Finance = function (faker) {
+ var ibanLib = require("./iban");
var Helpers = faker.helpers,
self = this;
@@ -150,6 +151,71 @@ var Finance = function (faker) {
return address;
}
+
+ /**
+ * iban
+ *
+ * @method faker.finance.iban
+ */
+ self.iban = function (formatted) {
+ var ibanFormat = faker.random.arrayElement(ibanLib.formats);
+ var s = "";
+ var count = 0;
+ for (var b = 0; b < ibanFormat.bban.length; b++) {
+ var bban = ibanFormat.bban[b];
+ var c = bban.count;
+ count += bban.count;
+ while (c > 0) {
+ if (bban.type == "a") {
+ s += faker.random.arrayElement(ibanLib.alpha);
+ } else if (bban.type == "c") {
+ if (faker.random.number(100) < 80) {
+ s += faker.random.number(9);
+ } else {
+ s += faker.random.arrayElement(ibanLib.alpha);
+ }
+ } else {
+ if (c >= 3 && faker.random.number(100) < 30) {
+ if (faker.random.boolean()) {
+ s += faker.random.arrayElement(ibanLib.pattern100);
+ c -= 2;
+ } else {
+ s += faker.random.arrayElement(ibanLib.pattern10);
+ c--;
+ }
+ } else {
+ s += faker.random.number(9);
+ }
+ }
+ c--;
+ }
+ s = s.substring(0, count);
+ }
+ var checksum = 98 - ibanLib.mod97(ibanLib.toDigitString(s + ibanFormat.country + "00"));
+ if (checksum < 10) {
+ checksum = "0" + checksum;
+ }
+ var iban = ibanFormat.country + checksum + s;
+ return formatted ? iban.match(/.{1,4}/g).join(" ") : iban;
+ }
+
+ /**
+ * bic
+ *
+ * @method faker.finance.bic
+ */
+ self.bic = function () {
+ var vowels = ["A", "E", "I", "O", "U"];
+ var prob = faker.random.number(100);
+ return Helpers.replaceSymbols("???") +
+ faker.random.arrayElement(vowels) +
+ faker.random.arrayElement(ibanLib.iso3166) +
+ Helpers.replaceSymbols("?") + "1" +
+ (prob < 10 ?
+ Helpers.replaceSymbols("?" + faker.random.arrayElement(vowels) + "?") :
+ prob < 40 ?
+ Helpers.replaceSymbols("###") : "");
+ }
}
module['exports'] = Finance;
diff --git a/lib/helpers.js b/lib/helpers.js
index ac3398d7..8585888b 100644
--- a/lib/helpers.js
+++ b/lib/helpers.js
@@ -61,14 +61,14 @@ var Helpers = function (faker) {
*/
self.replaceSymbols = function (string) {
string = string || "";
- var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
+ var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
var str = '';
for (var i = 0; i < string.length; i++) {
if (string.charAt(i) == "#") {
str += faker.random.number(9);
- } else if (string.charAt(i) == "?") {
- str += faker.random.arrayElement(alpha);
+ } else if (string.charAt(i) == "?") {
+ str += faker.random.arrayElement(alpha);
} else {
str += string.charAt(i);
}
diff --git a/lib/iban.js b/lib/iban.js
new file mode 100644
index 00000000..92cd08b0
--- /dev/null
+++ b/lib/iban.js
@@ -0,0 +1,1136 @@
+module["exports"] = {
+ alpha: [
+ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
+ ],
+ pattern10: [
+ "01", "02", "03", "04", "05", "06", "07", "08", "09"
+ ],
+ pattern100: [
+ "001", "002", "003", "004", "005", "006", "007", "008", "009"
+ ],
+ toDigitString: function (str) {
+ return str.replace(/[A-Z]/gi, function(match) {
+ return match.toUpperCase().charCodeAt(0) - 55;
+ });
+ },
+ mod97: function (digitStr) {
+ var m = 0;
+ for (var i = 0; i < digitStr.length; i++) {
+ m = ((m * 10) + (digitStr[i] |0)) % 97;
+ }
+ return m;
+ },
+ formats: [
+ {
+ country: "AL",
+ total: 28,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "ALkk bbbs sssx cccc cccc cccc cccc"
+ },
+ {
+ country: "AD",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "c",
+ count: 12
+ }
+ ],
+ format: "ADkk bbbb ssss cccc cccc cccc"
+ },
+ {
+ country: "AT",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "n",
+ count: 11
+ }
+ ],
+ format: "ATkk bbbb bccc cccc cccc"
+ },
+ {
+ country: "AZ",
+ total: 28,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 20
+ }
+ ],
+ format: "AZkk bbbb cccc cccc cccc cccc cccc"
+ },
+ {
+ country: "BH",
+ total: 22,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 14
+ }
+ ],
+ format: "BHkk bbbb cccc cccc cccc cc"
+ },
+ {
+ country: "BE",
+ total: 16,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 9
+ }
+ ],
+ format: "BEkk bbbc cccc ccxx"
+ },
+ {
+ country: "BA",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "BAkk bbbs sscc cccc ccxx"
+ },
+ {
+ country: "BR",
+ total: 29,
+ bban: [
+ {
+ type: "n",
+ count: 13
+ },
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "a",
+ count: 1
+ },
+ {
+ type: "c",
+ count: 1
+ }
+ ],
+ format: "BRkk bbbb bbbb ssss sccc cccc ccct n"
+ },
+ {
+ country: "BG",
+ total: 22,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "c",
+ count: 8
+ }
+ ],
+ format: "BGkk bbbb ssss ddcc cccc cc"
+ },
+ {
+ country: "CR",
+ total: 21,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 14
+ }
+ ],
+ format: "CRkk bbbc cccc cccc cccc c"
+ },
+ {
+ country: "HR",
+ total: 21,
+ bban: [
+ {
+ type: "n",
+ count: 7
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "HRkk bbbb bbbc cccc cccc c"
+ },
+ {
+ country: "CY",
+ total: 28,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "CYkk bbbs ssss cccc cccc cccc cccc"
+ },
+ {
+ country: "CZ",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "CZkk bbbb ssss sscc cccc cccc"
+ },
+ {
+ country: "DK",
+ total: 18,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "DKkk bbbb cccc cccc cc"
+ },
+ {
+ country: "DO",
+ total: 28,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 20
+ }
+ ],
+ format: "DOkk bbbb cccc cccc cccc cccc cccc"
+ },
+ {
+ country: "TL",
+ total: 23,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "TLkk bbbc cccc cccc cccc cxx"
+ },
+ {
+ country: "EE",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 12
+ }
+ ],
+ format: "EEkk bbss cccc cccc cccx"
+ },
+ {
+ country: "FO",
+ total: 18,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "FOkk bbbb cccc cccc cx"
+ },
+ {
+ country: "FI",
+ total: 18,
+ bban: [
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 8
+ }
+ ],
+ format: "FIkk bbbb bbcc cccc cx"
+ },
+ {
+ country: "FR",
+ total: 27,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "c",
+ count: 11
+ },
+ {
+ type: "n",
+ count: 2
+ }
+ ],
+ format: "FRkk bbbb bggg ggcc cccc cccc cxx"
+ },
+ {
+ country: "GE",
+ total: 22,
+ bban: [
+ {
+ type: "c",
+ count: 2
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "GEkk bbcc cccc cccc cccc cc"
+ },
+ {
+ country: "DE",
+ total: 22,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "DEkk bbbb bbbb cccc cccc cc"
+ },
+ {
+ country: "GI",
+ total: 23,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 15
+ }
+ ],
+ format: "GIkk bbbb cccc cccc cccc ccc"
+ },
+ {
+ country: "GR",
+ total: 27,
+ bban: [
+ {
+ type: "n",
+ count: 7
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "GRkk bbbs sssc cccc cccc cccc ccc"
+ },
+ {
+ country: "GL",
+ total: 18,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "GLkk bbbb cccc cccc cc"
+ },
+ {
+ country: "GT",
+ total: 28,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "GTkk bbbb mmtt cccc cccc cccc cccc"
+ },
+ {
+ country: "HU",
+ total: 28,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "HUkk bbbs sssk cccc cccc cccc cccx"
+ },
+ {
+ country: "IS",
+ total: 26,
+ bban: [
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "ISkk bbbb sscc cccc iiii iiii ii"
+ },
+ {
+ country: "IE",
+ total: 22,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 8
+ }
+ ],
+ format: "IEkk aaaa bbbb bbcc cccc cc"
+ },
+ {
+ country: "IL",
+ total: 23,
+ bban: [
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 13
+ }
+ ],
+ format: "ILkk bbbn nncc cccc cccc ccc"
+ },
+ {
+ country: "IT",
+ total: 27,
+ bban: [
+ {
+ type: "a",
+ count: 1
+ },
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "c",
+ count: 12
+ }
+ ],
+ format: "ITkk xaaa aabb bbbc cccc cccc ccc"
+ },
+ {
+ country: "JO",
+ total: 30,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 18
+ }
+ ],
+ format: "JOkk bbbb nnnn cccc cccc cccc cccc cc"
+ },
+ {
+ country: "KZ",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "c",
+ count: 13
+ }
+ ],
+ format: "KZkk bbbc cccc cccc cccc"
+ },
+ {
+ country: "XK",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 12
+ }
+ ],
+ format: "XKkk bbbb cccc cccc cccc"
+ },
+ {
+ country: "KW",
+ total: 30,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 22
+ }
+ ],
+ format: "KWkk bbbb cccc cccc cccc cccc cccc cc"
+ },
+ {
+ country: "LV",
+ total: 21,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 13
+ }
+ ],
+ format: "LVkk bbbb cccc cccc cccc c"
+ },
+ {
+ country: "LB",
+ total: 28,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 20
+ }
+ ],
+ format: "LBkk bbbb cccc cccc cccc cccc cccc"
+ },
+ {
+ country: "LI",
+ total: 21,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "c",
+ count: 12
+ }
+ ],
+ format: "LIkk bbbb bccc cccc cccc c"
+ },
+ {
+ country: "LT",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "n",
+ count: 11
+ }
+ ],
+ format: "LTkk bbbb bccc cccc cccc"
+ },
+ {
+ country: "LU",
+ total: 20,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "c",
+ count: 13
+ }
+ ],
+ format: "LUkk bbbc cccc cccc cccc"
+ },
+ {
+ country: "MK",
+ total: 19,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "c",
+ count: 10
+ },
+ {
+ type: "n",
+ count: 2
+ }
+ ],
+ format: "MKkk bbbc cccc cccc cxx"
+ },
+ {
+ country: "MT",
+ total: 31,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "c",
+ count: 18
+ }
+ ],
+ format: "MTkk bbbb ssss sccc cccc cccc cccc ccc"
+ },
+ {
+ country: "MR",
+ total: 27,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "n",
+ count: 13
+ }
+ ],
+ format: "MRkk bbbb bsss sscc cccc cccc cxx"
+ },
+ {
+ country: "MU",
+ total: 30,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 15
+ },
+ {
+ type: "a",
+ count: 3
+ }
+ ],
+ format: "MUkk bbbb bbss cccc cccc cccc 000d dd"
+ },
+ {
+ country: "MC",
+ total: 27,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "c",
+ count: 11
+ },
+ {
+ type: "n",
+ count: 2
+ }
+ ],
+ format: "MCkk bbbb bsss sscc cccc cccc cxx"
+ },
+ {
+ country: "MD",
+ total: 24,
+ bban: [
+ {
+ type: "c",
+ count: 2
+ },
+ {
+ type: "c",
+ count: 18
+ }
+ ],
+ format: "MDkk bbcc cccc cccc cccc cccc"
+ },
+ {
+ country: "ME",
+ total: 22,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 15
+ }
+ ],
+ format: "MEkk bbbc cccc cccc cccc xx"
+ },
+ {
+ country: "NL",
+ total: 18,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "NLkk bbbb cccc cccc cc"
+ },
+ {
+ country: "NO",
+ total: 15,
+ bban: [
+ {
+ type: "n",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 7
+ }
+ ],
+ format: "NOkk bbbb cccc ccx"
+ },
+ {
+ country: "PK",
+ total: 24,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "PKkk bbbb cccc cccc cccc cccc"
+ },
+ {
+ country: "PS",
+ total: 29,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 9
+ },
+ {
+ type: "n",
+ count: 12
+ }
+ ],
+ format: "PSkk bbbb xxxx xxxx xccc cccc cccc c"
+ },
+ {
+ country: "PL",
+ total: 28,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "PLkk bbbs sssx cccc cccc cccc cccc"
+ },
+ {
+ country: "PT",
+ total: 25,
+ bban: [
+ {
+ type: "n",
+ count: 8
+ },
+ {
+ type: "n",
+ count: 13
+ }
+ ],
+ format: "PTkk bbbb ssss cccc cccc cccx x"
+ },
+ {
+ country: "QA",
+ total: 29,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 21
+ }
+ ],
+ format: "QAkk bbbb cccc cccc cccc cccc cccc c"
+ },
+ {
+ country: "RO",
+ total: 24,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "ROkk bbbb cccc cccc cccc cccc"
+ },
+ {
+ country: "SM",
+ total: 27,
+ bban: [
+ {
+ type: "a",
+ count: 1
+ },
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "c",
+ count: 12
+ }
+ ],
+ format: "SMkk xaaa aabb bbbc cccc cccc ccc"
+ },
+ {
+ country: "SA",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 2
+ },
+ {
+ type: "c",
+ count: 18
+ }
+ ],
+ format: "SAkk bbcc cccc cccc cccc cccc"
+ },
+ {
+ country: "RS",
+ total: 22,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 15
+ }
+ ],
+ format: "RSkk bbbc cccc cccc cccc xx"
+ },
+ {
+ country: "SK",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "SKkk bbbb ssss sscc cccc cccc"
+ },
+ {
+ country: "SI",
+ total: 19,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "SIkk bbss sccc cccc cxx"
+ },
+ {
+ country: "ES",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 10
+ },
+ {
+ type: "n",
+ count: 10
+ }
+ ],
+ format: "ESkk bbbb gggg xxcc cccc cccc"
+ },
+ {
+ country: "SE",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 17
+ }
+ ],
+ format: "SEkk bbbc cccc cccc cccc cccc"
+ },
+ {
+ country: "CH",
+ total: 21,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "c",
+ count: 12
+ }
+ ],
+ format: "CHkk bbbb bccc cccc cccc c"
+ },
+ {
+ country: "TN",
+ total: 24,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "n",
+ count: 15
+ }
+ ],
+ format: "TNkk bbss sccc cccc cccc cccc"
+ },
+ {
+ country: "TR",
+ total: 26,
+ bban: [
+ {
+ type: "n",
+ count: 5
+ },
+ {
+ type: "c",
+ count: 1
+ },
+ {
+ type: "c",
+ count: 16
+ }
+ ],
+ format: "TRkk bbbb bxcc cccc cccc cccc cc"
+ },
+ {
+ country: "AE",
+ total: 23,
+ bban: [
+ {
+ type: "n",
+ count: 3
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "AEkk bbbc cccc cccc cccc ccc"
+ },
+ {
+ country: "GB",
+ total: 22,
+ bban: [
+ {
+ type: "a",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 6
+ },
+ {
+ type: "n",
+ count: 8
+ }
+ ],
+ format: "GBkk bbbb ssss sscc cccc cc"
+ },
+ {
+ country: "VG",
+ total: 24,
+ bban: [
+ {
+ type: "c",
+ count: 4
+ },
+ {
+ type: "n",
+ count: 16
+ }
+ ],
+ format: "VGkk bbbb cccc cccc cccc cccc"
+ }
+ ],
+ iso3166: [
+ "AC", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS",
+ "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI",
+ "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BY",
+ "BZ", "CA", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN",
+ "CO", "CP", "CR", "CS", "CS", "CU", "CV", "CW", "CX", "CY", "CZ", "DD", "DE",
+ "DG", "DJ", "DK", "DM", "DO", "DZ", "EA", "EC", "EE", "EG", "EH", "ER", "ES",
+ "ET", "EU", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB", "GD", "GE",
+ "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU",
+ "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "IC", "ID", "IE", "IL", "IM",
+ "IN", "IO", "IQ", "IR", "IS", "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH",
+ "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK",
+ "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH",
+ "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW",
+ "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR",
+ "NT", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN",
+ "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB",
+ "SC", "SD", "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR",
+ "SS", "ST", "SU", "SV", "SX", "SY", "SZ", "TA", "TC", "TD", "TF", "TG", "TH",
+ "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG",
+ "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS",
+ "YE", "YT", "YU", "ZA", "ZM", "ZR", "ZW"
+ ]
+} \ No newline at end of file
diff --git a/lib/index.js b/lib/index.js
index 49637ef8..8e710e67 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -92,7 +92,7 @@ function Faker (opts) {
"lorem": ["words"],
"hacker": ["abbreviation", "adjective", "noun", "verb", "ingverb"],
"phone_number": ["formats"],
- "finance": ["account_type", "transaction_type", "currency"],
+ "finance": ["account_type", "transaction_type", "currency", "iban"],
"internet": ["avatar_uri", "domain_suffix", "free_email", "example_email", "password"],
"commerce": ["color", "department", "product_name", "price", "categories"],
"system": ["mimeTypes"],
diff --git a/test/finance.unit.js b/test/finance.unit.js
index 8be7d2c8..ee4bfbd6 100644
--- a/test/finance.unit.js
+++ b/test/finance.unit.js
@@ -201,7 +201,7 @@ describe('finance.js', function () {
assert.ok(currencyCode.match(/[A-Z]{3}/));
});
- })
+ });
describe("bitcoinAddress()", function(){
it("returns a random bitcoin address", function(){
@@ -210,4 +210,24 @@ describe('finance.js', function () {
assert.ok(bitcoinAddress.match(/^[A-Z0-9.]{27,34}$/));
});
});
+
+ describe("iban()", function () {
+ var ibanLib = require('../lib/iban');
+ it("returns a random yet formally correct IBAN number", function () {
+ var iban = faker.finance.iban();
+ var bban = iban.substring(4) + iban.substring(0, 4);
+
+ assert.equal(ibanLib.mod97(ibanLib.toDigitString(bban)), 1, "the result should be equal to 1");
+ });
+ });
+
+ describe("bic()", function () {
+ var ibanLib = require('../lib/iban');
+ it("returns a random yet formally correct BIC number", function () {
+ var bic = faker.finance.bic();
+ var expr = new RegExp("^[A-Z]{4}(" + ibanLib.iso3166.join("|") + ")[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$", "i");
+
+ assert.ok(bic.match(expr));
+ });
+ });
}); \ No newline at end of file