kontonummer 1.4.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +5 -278
  2. package/dist/cjs/banks.js +270 -0
  3. package/dist/cjs/banks.js.map +1 -0
  4. package/dist/cjs/errors.js +11 -0
  5. package/dist/cjs/errors.js.map +1 -0
  6. package/dist/cjs/format.js +84 -0
  7. package/dist/cjs/format.js.map +1 -0
  8. package/dist/cjs/index.js +150 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/validate.js +46 -0
  11. package/dist/cjs/validate.js.map +1 -0
  12. package/dist/esm/banks.js +267 -0
  13. package/dist/esm/banks.js.map +1 -0
  14. package/dist/esm/errors.js +7 -0
  15. package/dist/esm/errors.js.map +1 -0
  16. package/dist/esm/format.js +80 -0
  17. package/dist/esm/format.js.map +1 -0
  18. package/dist/esm/index.js +120 -0
  19. package/dist/esm/index.js.map +1 -0
  20. package/dist/esm/validate.js +41 -0
  21. package/dist/esm/validate.js.map +1 -0
  22. package/{dist-types → dist/types}/banks.d.ts +3 -3
  23. package/{dist-types → dist/types}/errors.d.ts +0 -0
  24. package/{dist-types → dist/types}/format.d.ts +0 -0
  25. package/{dist-types → dist/types}/index.d.ts +0 -0
  26. package/dist/types/validate.d.ts +6 -0
  27. package/package.json +35 -53
  28. package/CHANGELOG.md +0 -35
  29. package/dist-node/index.js +0 -924
  30. package/dist-node/index.js.map +0 -1
  31. package/dist-src/banks.js +0 -247
  32. package/dist-src/errors.js +0 -49
  33. package/dist-src/format.js +0 -102
  34. package/dist-src/index.js +0 -207
  35. package/dist-src/validate.js +0 -41
  36. package/dist-types/validate.d.ts +0 -5
  37. package/dist-web/index.bundled.js +0 -2
  38. package/dist-web/index.bundled.js.map +0 -1
  39. package/dist-web/index.js +0 -647
  40. package/dist-web/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
26
+ if (kind === "m") throw new TypeError("Private method is not writable");
27
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
28
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
29
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
30
+ };
31
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
32
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
33
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
34
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ var _Kontonummer_bankName, _Kontonummer_sortingCode, _Kontonummer_accountNumber, _Kontonummer_type, _Kontonummer_comment, _Kontonummer_valid;
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.valid = exports.parse = void 0;
42
+ const banks_1 = __importDefault(require("./banks"));
43
+ const errors_1 = require("./errors");
44
+ const validate_1 = __importStar(require("./validate"));
45
+ const format_1 = __importDefault(require("./format"));
46
+ class Kontonummer {
47
+ constructor(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, optionsArg) {
48
+ _Kontonummer_bankName.set(this, void 0);
49
+ _Kontonummer_sortingCode.set(this, void 0);
50
+ _Kontonummer_accountNumber.set(this, void 0);
51
+ _Kontonummer_type.set(this, void 0);
52
+ _Kontonummer_comment.set(this, void 0);
53
+ _Kontonummer_valid.set(this, void 0); // only relevant in `lax` mode
54
+ let accountNumber;
55
+ let options = {
56
+ mode: 'strict'
57
+ };
58
+ // parse params
59
+ // sortingCode
60
+ sortingCodeWithOrWithoutAccountNumber = `${sortingCodeWithOrWithoutAccountNumber}`.replace(/[^\d]/g, '');
61
+ // Swedbank 8xxx-x have 5 digits
62
+ const sortingCode = sortingCodeWithOrWithoutAccountNumber.substring(0, sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
63
+ // accountNumber
64
+ if (typeof accountOrOptions === 'object') {
65
+ options = accountOrOptions;
66
+ accountNumber = sortingCodeWithOrWithoutAccountNumber.substring(sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
67
+ }
68
+ else if (typeof accountOrOptions === 'string' || typeof accountOrOptions === 'number') {
69
+ accountNumber = `${accountOrOptions}`.replace(/[^\d]/g, '');
70
+ }
71
+ else {
72
+ accountNumber = sortingCodeWithOrWithoutAccountNumber.substring(sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
73
+ }
74
+ // optionsArg
75
+ if (typeof optionsArg === 'object') {
76
+ options = optionsArg;
77
+ }
78
+ // validate arguments
79
+ if (sortingCode.length < 4 || (sortingCode.length > 4 ? !(0, validate_1.mod10)(sortingCode) : false)) {
80
+ throw new errors_1.KontonummerError('Invalid sorting code');
81
+ }
82
+ if (accountNumber.length < 2) {
83
+ throw new errors_1.KontonummerError('Invalid account number');
84
+ }
85
+ const bank = Kontonummer.getSortingCodeInfo(sortingCode);
86
+ const valid = (0, validate_1.default)(bank.type, bank.comment, sortingCode, accountNumber);
87
+ if (!valid && options.mode === 'strict')
88
+ throw new errors_1.KontonummerError('Invalid account number');
89
+ if (!valid && bank.type === 1 && options.mode === 'semi')
90
+ throw new errors_1.KontonummerError('Invalid account number');
91
+ __classPrivateFieldSet(this, _Kontonummer_bankName, bank.bankName, "f");
92
+ __classPrivateFieldSet(this, _Kontonummer_type, bank.type, "f");
93
+ __classPrivateFieldSet(this, _Kontonummer_comment, bank.comment, "f");
94
+ __classPrivateFieldSet(this, _Kontonummer_sortingCode, sortingCode, "f");
95
+ __classPrivateFieldSet(this, _Kontonummer_accountNumber, accountNumber, "f");
96
+ __classPrivateFieldSet(this, _Kontonummer_valid, valid, "f");
97
+ }
98
+ get bankName() { return __classPrivateFieldGet(this, _Kontonummer_bankName, "f"); }
99
+ get sortingCode() { return __classPrivateFieldGet(this, _Kontonummer_sortingCode, "f"); }
100
+ get accountNumber() { return __classPrivateFieldGet(this, _Kontonummer_accountNumber, "f"); }
101
+ get type() { return __classPrivateFieldGet(this, _Kontonummer_type, "f"); }
102
+ get comment() { return __classPrivateFieldGet(this, _Kontonummer_comment, "f"); }
103
+ get valid() { return __classPrivateFieldGet(this, _Kontonummer_valid, "f"); }
104
+ format(format) {
105
+ return (0, format_1.default)(this.sortingCode, this.accountNumber, Kontonummer.getSortingCodeInfo(this.sortingCode), format);
106
+ }
107
+ static parse(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, options) {
108
+ if (typeof accountOrOptions === 'string' || typeof accountOrOptions === 'number')
109
+ return new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, options);
110
+ else
111
+ return new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountOrOptions);
112
+ }
113
+ static valid(sortingCodeWithOrWithoutAccountNumber, accountNumber) {
114
+ if (accountNumber && (typeof accountNumber !== 'string' || typeof accountNumber !== 'number'))
115
+ throw new errors_1.KontonummerError('Kontonummer.valid() does not accept an options argument');
116
+ try {
117
+ if (accountNumber)
118
+ new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountNumber); // eslint-disable-line no-new
119
+ else
120
+ new Kontonummer(sortingCodeWithOrWithoutAccountNumber); // eslint-disable-line no-new
121
+ return true;
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ static getSortingCodeInfo(sortingCode) {
128
+ const bank = (0, banks_1.default)(sortingCode);
129
+ if (typeof bank === 'undefined')
130
+ throw new errors_1.KontonummerError(`No Bank found with sorting code ${sortingCode}`);
131
+ return bank;
132
+ }
133
+ toJSON() {
134
+ return {
135
+ bankName: this.bankName,
136
+ sortingCode: this.sortingCode,
137
+ accountNumber: this.accountNumber,
138
+ type: this.type,
139
+ comment: this.comment,
140
+ valid: this.valid
141
+ };
142
+ }
143
+ [(_Kontonummer_bankName = new WeakMap(), _Kontonummer_sortingCode = new WeakMap(), _Kontonummer_accountNumber = new WeakMap(), _Kontonummer_type = new WeakMap(), _Kontonummer_comment = new WeakMap(), _Kontonummer_valid = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {
144
+ return this.toJSON();
145
+ }
146
+ }
147
+ exports.default = Kontonummer;
148
+ exports.parse = Kontonummer.parse;
149
+ exports.valid = Kontonummer.valid;
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mod11 = exports.mod10 = void 0;
4
+ const mod10 = (number) => {
5
+ number = `${number}`;
6
+ let len = number.length;
7
+ let bit = 1;
8
+ let sum = 0;
9
+ let val;
10
+ const arr = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
11
+ while (len) {
12
+ val = parseInt(number.charAt(--len), 10);
13
+ bit ^= 1;
14
+ sum += bit ? arr[val] : val;
15
+ }
16
+ return !!sum && sum % 10 === 0;
17
+ };
18
+ exports.mod10 = mod10;
19
+ const mod11 = (number) => {
20
+ number = `${number}`;
21
+ let len = number.length;
22
+ let sum = 0;
23
+ let val;
24
+ const weights = [1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
25
+ const arr = weights.splice(weights.length - len, weights.length - (weights.length - len));
26
+ while (len) {
27
+ val = parseInt(number.charAt(--len), 10);
28
+ sum += arr[len] * val;
29
+ }
30
+ return !!sum && sum % 11 === 0;
31
+ };
32
+ exports.mod11 = mod11;
33
+ exports.default = (type, comment, sortingCode, accountNumber) => {
34
+ // 1:1 => mod11 on 3 last of clearing + whole account number
35
+ if (type === 1 && comment === 1)
36
+ return (0, exports.mod11)(`${sortingCode.substring(1)}${accountNumber.padStart(7, '0')}`);
37
+ // 1:2 => mod 11 on whole clearing + whole account number
38
+ if (type === 1 && comment === 2)
39
+ return (0, exports.mod11)(`${sortingCode}${accountNumber.padStart(7, '0')}`);
40
+ // 2:2 => mod11 on whole account number (SHB) 9 digits
41
+ if (type === 2 && comment === 2)
42
+ return (0, exports.mod11)(`${accountNumber.padStart(9, '0')}`);
43
+ // 2:1 & 2:3 => mod10 on whole account number
44
+ return (0, exports.mod10)(accountNumber.padStart(10, '0'));
45
+ };
46
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":";;;AAGO,MAAM,KAAK,GAAgB,CAAC,MAAM,EAAE,EAAE;IAC3C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IAEpB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAA;IACvB,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAW,CAAA;IACf,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1C,OAAO,GAAG,EAAE;QACV,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QACxC,GAAG,IAAI,CAAC,CAAA;QACR,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;KAC5B;IAED,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;AAChC,CAAC,CAAA;AAhBY,QAAA,KAAK,SAgBjB;AAEM,MAAM,KAAK,GAAgB,CAAC,MAAM,EAAE,EAAE;IAC3C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IAEpB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAA;IACvB,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAW,CAAA;IACf,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAA;IAEzF,OAAO,GAAG,EAAE;QACV,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QACxC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KACtB;IAED,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;AAChC,CAAC,CAAA;AAfY,QAAA,KAAK,SAejB;AAED,kBAAe,CAAC,IAA6B,EAAE,OAAmC,EAAE,WAAmB,EAAE,aAAqB,EAAE,EAAE;IAChI,4DAA4D;IAC5D,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAA,aAAK,EAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IAC7G,yDAAyD;IACzD,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAA,aAAK,EAAC,GAAG,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IAEhG,sDAAsD;IACtD,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAA,aAAK,EAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IAClF,6CAA6C;IAC7C,OAAO,IAAA,aAAK,EAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA"}
@@ -0,0 +1,267 @@
1
+ export const banks = [
2
+ // Type 1 accounts. Always 11 digits long sortingCode included.
3
+ // SSSSAAAAAAC
4
+ {
5
+ bankName: 'Avanza Bank',
6
+ type: 1,
7
+ comment: 2,
8
+ ranges: [[9550, 9569]]
9
+ },
10
+ {
11
+ bankName: 'BlueStep Finans',
12
+ type: 1,
13
+ comment: 1,
14
+ ranges: [[9680, 9689]]
15
+ },
16
+ {
17
+ bankName: 'BNP Paribas SA.',
18
+ type: 1,
19
+ comment: 2,
20
+ ranges: [[9470, 9479]]
21
+ },
22
+ {
23
+ bankName: 'Citibank',
24
+ type: 1,
25
+ comment: 2,
26
+ ranges: [[9040, 9049]]
27
+ },
28
+ {
29
+ bankName: 'Danske Bank',
30
+ type: 1,
31
+ comment: 1,
32
+ ranges: [[1200, 1399], [2400, 2499]]
33
+ },
34
+ {
35
+ bankName: 'DNB Bank',
36
+ type: 1,
37
+ comment: 2,
38
+ ranges: [[9190, 9199], [9260, 9269]]
39
+ },
40
+ {
41
+ bankName: 'Ekobanken',
42
+ type: 1,
43
+ comment: 2,
44
+ ranges: [[9700, 9709]]
45
+ },
46
+ {
47
+ bankName: 'Erik Penser',
48
+ type: 1,
49
+ comment: 2,
50
+ ranges: [[9590, 9599]]
51
+ },
52
+ {
53
+ bankName: 'Ferratum Bank plc',
54
+ type: 1,
55
+ comment: 1,
56
+ ranges: [[9070, 9079]]
57
+ },
58
+ {
59
+ bankName: 'ICA Banken',
60
+ type: 1,
61
+ comment: 1,
62
+ ranges: [[9270, 9279]]
63
+ },
64
+ {
65
+ bankName: 'IKANO Bank',
66
+ type: 1,
67
+ comment: 1,
68
+ ranges: [[9170, 9179]]
69
+ },
70
+ {
71
+ bankName: 'JAK Medlemsbank',
72
+ type: 1,
73
+ comment: 2,
74
+ ranges: [[9670, 9679]]
75
+ },
76
+ {
77
+ bankName: 'Klarna Bank',
78
+ type: 1,
79
+ comment: 2,
80
+ ranges: [[9780, 9789]]
81
+ },
82
+ {
83
+ bankName: 'Landshypotek',
84
+ type: 1,
85
+ comment: 2,
86
+ ranges: [[9390, 9399]]
87
+ },
88
+ {
89
+ bankName: 'Lån & Spar Bank Sverige',
90
+ type: 1,
91
+ comment: 1,
92
+ ranges: [[9630, 9639]]
93
+ },
94
+ {
95
+ bankName: 'Länsförsäkringar Bank',
96
+ type: 1,
97
+ comment: 1,
98
+ ranges: [[3400, 3499], [9060, 9069]]
99
+ },
100
+ {
101
+ bankName: 'Länsförsäkringar Bank',
102
+ type: 1,
103
+ comment: 2,
104
+ ranges: [[9020, 9029]]
105
+ },
106
+ {
107
+ bankName: 'Marginalen Bank',
108
+ type: 1,
109
+ comment: 1,
110
+ ranges: [[9230, 9239]]
111
+ },
112
+ {
113
+ bankName: 'Nordax Bank',
114
+ type: 1,
115
+ comment: 2,
116
+ ranges: [[9640, 9649]]
117
+ },
118
+ {
119
+ bankName: 'Nordea',
120
+ type: 1,
121
+ comment: 1,
122
+ ranges: [[1100, 1199], [1400, 2099], [3000, 3299], [3301, 3399], [3410, 3781], [3783, 3999]]
123
+ },
124
+ {
125
+ bankName: 'Nordea',
126
+ type: 1,
127
+ comment: 2,
128
+ ranges: [[4000, 4999]]
129
+ },
130
+ {
131
+ bankName: 'Nordnet Bank',
132
+ type: 1,
133
+ comment: 2,
134
+ ranges: [[9100, 9109]]
135
+ },
136
+ {
137
+ bankName: 'Northmill Bank',
138
+ type: 1,
139
+ comment: 2,
140
+ ranges: [[9750, 9759]]
141
+ },
142
+ {
143
+ bankName: 'Resurs Bank',
144
+ type: 1,
145
+ comment: 1,
146
+ ranges: [[9280, 9289]]
147
+ },
148
+ {
149
+ bankName: 'Riksgälden',
150
+ type: 1,
151
+ comment: 2,
152
+ ranges: [[9880, 9889]]
153
+ },
154
+ {
155
+ bankName: 'Santander Consumer Bank',
156
+ type: 1,
157
+ comment: 1,
158
+ ranges: [[9460, 9469]]
159
+ },
160
+ {
161
+ bankName: 'SBAB',
162
+ type: 1,
163
+ comment: 1,
164
+ ranges: [[9250, 9259]]
165
+ },
166
+ {
167
+ bankName: 'SEB',
168
+ type: 1,
169
+ comment: 1,
170
+ ranges: [[5000, 5999], [9120, 9124], [9130, 9149]]
171
+ },
172
+ {
173
+ bankName: 'Skandiabanken',
174
+ type: 1,
175
+ comment: 2,
176
+ ranges: [[9150, 9169]]
177
+ },
178
+ {
179
+ bankName: 'Svea Bank',
180
+ type: 1,
181
+ comment: 2,
182
+ ranges: [[9660, 9669]]
183
+ },
184
+ {
185
+ bankName: 'Swedbank',
186
+ type: 1,
187
+ comment: 1,
188
+ ranges: [[7000, 7999]]
189
+ },
190
+ {
191
+ bankName: 'Ålandsbanken',
192
+ type: 1,
193
+ comment: 2,
194
+ ranges: [[2300, 2399]]
195
+ },
196
+ // Type 2 accounts - the messy ones
197
+ {
198
+ bankName: 'Danske Bank',
199
+ type: 2,
200
+ comment: 1,
201
+ ranges: [[9180, 9189]],
202
+ accountMinLength: 10,
203
+ accountMaxLength: 10
204
+ },
205
+ {
206
+ bankName: 'Handelsbanken',
207
+ type: 2,
208
+ comment: 2,
209
+ ranges: [[6000, 6999]],
210
+ accountMinLength: 8,
211
+ accountMaxLength: 9
212
+ },
213
+ {
214
+ bankName: 'Nordea',
215
+ type: 2,
216
+ comment: 1,
217
+ ranges: [[3300, 3300], [3782, 3782]],
218
+ accountMinLength: 10,
219
+ accountMaxLength: 10
220
+ },
221
+ {
222
+ bankName: 'Nordea Plusgirot',
223
+ type: 2,
224
+ comment: 3,
225
+ ranges: [[9500, 9549], [9960, 9969]],
226
+ accountMinLength: 2,
227
+ accountMaxLength: 8
228
+ },
229
+ {
230
+ bankName: 'Riksgälden',
231
+ type: 2,
232
+ comment: 1,
233
+ ranges: [[9890, 9899]],
234
+ accountMinLength: 10,
235
+ accountMaxLength: 10
236
+ },
237
+ {
238
+ bankName: 'Sparbanken Syd',
239
+ type: 2,
240
+ comment: 1,
241
+ ranges: [[9570, 9579]],
242
+ accountMinLength: 10,
243
+ accountMaxLength: 10
244
+ },
245
+ {
246
+ bankName: 'Swedbank',
247
+ type: 2,
248
+ comment: 3,
249
+ ranges: [[8000, 8999]],
250
+ accountMinLength: 10,
251
+ accountMaxLength: 11 // Allowing 11 here in case clearingnumber is sent as the first four instead of the first five
252
+ },
253
+ {
254
+ bankName: 'Swedbank',
255
+ type: 2,
256
+ comment: 1,
257
+ ranges: [[9300, 9349]],
258
+ accountMinLength: 10,
259
+ accountMaxLength: 10
260
+ }
261
+ ];
262
+ export default (sortingCode) => banks.find(bank => bank.ranges.some(([min, max]) => {
263
+ const sortingCodeNumber = Number(`${sortingCode}`.replace(/[^\d]/g, '').substring(0, 4));
264
+ return sortingCodeNumber >= min &&
265
+ sortingCodeNumber <= max;
266
+ }));
267
+ //# sourceMappingURL=banks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banks.js","sourceRoot":"","sources":["../../src/banks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export class KontonummerError extends Error {
2
+ constructor() {
3
+ super(...arguments);
4
+ this.name = 'KontonummerError';
5
+ }
6
+ }
7
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAA3C;;QACE,SAAI,GAAG,kBAAkB,CAAA;IAC3B,CAAC;CAAA"}
@@ -0,0 +1,80 @@
1
+ export const formatter = (sortingCode, accountNumber, mask, pad = false) => {
2
+ // we need to split these because sortingCode goes ltr and accountNumber goes rtl
3
+ const accountNumberMask = mask.substring(mask.lastIndexOf('S') + 1);
4
+ const sortingCodeMask = mask.substring(0, mask.lastIndexOf('S') + 1);
5
+ const sortingCodeResult = [];
6
+ const accountNumberResult = [];
7
+ const sortingCodeChars = sortingCode.split('');
8
+ const accountNumberChars = accountNumber.split('');
9
+ /*
10
+ * Here's what will happen we'll go through the mask and replace every 'S' with the next
11
+ * character in the sorting code. if there's no mask for that character we output the character
12
+ * If there's no more characters we end the loop.
13
+ */
14
+ for (let idx = 0; idx < Math.max(sortingCodeMask.length, sortingCodeChars.length); idx++) {
15
+ if (sortingCodeMask[idx] === 'S' || sortingCodeMask[idx] === undefined) {
16
+ sortingCodeResult.push(sortingCodeChars.shift() ?? '');
17
+ }
18
+ else {
19
+ sortingCodeResult.push(sortingCodeMask[idx]);
20
+ }
21
+ if (sortingCodeChars.length === 0)
22
+ break;
23
+ }
24
+ /*
25
+ * for the account number we do a similar thing to the sorting code, except that we start
26
+ * from the right. Why? Because we might want to zero-pad the number based on the mask, and we
27
+ * always want the zero padding to the left/the start of the number
28
+ */
29
+ for (let idx = accountNumberMask.length - 1; idx >= 0; idx--) {
30
+ if (accountNumberMask[idx] === 'A') {
31
+ accountNumberResult.unshift(accountNumberChars.pop() ?? (pad ? '0' : ''));
32
+ }
33
+ else {
34
+ accountNumberResult.unshift(accountNumberMask[idx]);
35
+ }
36
+ // if we have more account number than we have mask we just dump it at the start
37
+ if (idx === accountNumberMask.indexOf('A') && accountNumberChars.length > 0) {
38
+ while (accountNumberChars.length) {
39
+ accountNumberResult.unshift(accountNumberChars.pop() ?? '');
40
+ }
41
+ }
42
+ if (accountNumberChars.length === 0 && !pad) {
43
+ accountNumberResult.unshift(...accountNumberMask.slice(0, accountNumberMask.indexOf('A')));
44
+ break;
45
+ }
46
+ }
47
+ return `${sortingCodeResult.join('')}${accountNumberResult.join('')}`;
48
+ };
49
+ export default (sortingCode, accountNumber, sortingCodeInfo, format = 'numeric') => {
50
+ sortingCode = `${sortingCode ?? ''}`;
51
+ accountNumber = `${accountNumber ?? ''}`;
52
+ const { bankName, type } = sortingCodeInfo;
53
+ if (format === 'pretty') {
54
+ if (type === 1 && bankName === 'Swedbank') {
55
+ return formatter(sortingCode, accountNumber, 'SSSS-AA-AAAAA', true);
56
+ }
57
+ else if (type === 1) {
58
+ return formatter(sortingCode, accountNumber, 'SSSS AA AAA AA', true);
59
+ }
60
+ else if (bankName === 'Swedbank') {
61
+ return formatter(sortingCode, accountNumber, 'SSSS-S, AAA AAA AAA-A');
62
+ }
63
+ else if (bankName === 'Handelsbanken') {
64
+ return formatter(sortingCode, accountNumber, 'SSSS, AAA AAA AAA');
65
+ }
66
+ else if (bankName === 'Nordea Plusgirot') {
67
+ return formatter(sortingCode, accountNumber, 'SSSS, AAA AA AA-A');
68
+ }
69
+ else if (bankName === 'Nordea') {
70
+ return formatter(sortingCode, accountNumber, 'SSSS, AAAAAA-AAAA');
71
+ }
72
+ else {
73
+ return formatter(sortingCode, accountNumber, 'SSSS-S, AA AAAA AAAA');
74
+ }
75
+ }
76
+ else {
77
+ return formatter(sortingCode, accountNumber, 'SSSSS' + new Array(sortingCodeInfo.accountMinLength ?? 7).fill('A').join(''), true);
78
+ }
79
+ };
80
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"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"}