stdnum 1.10.8 → 1.11.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.
- package/README.md +3 -2
- package/lib/cjs/ca/bc_bhn.d.ts +2 -0
- package/lib/cjs/ca/bc_bhn.js +89 -0
- package/lib/cjs/ca/index.d.ts +1 -0
- package/lib/cjs/ca/index.js +3 -2
- package/lib/cjs/in/index.d.ts +1 -0
- package/lib/cjs/in/index.js +3 -2
- package/lib/cjs/in/vid.d.ts +2 -0
- package/lib/cjs/in/vid.js +87 -0
- package/lib/cjs/ua/edrpou.js +2 -2
- package/lib/esm/ca/bc_bhn.d.ts +2 -0
- package/lib/esm/ca/bc_bhn.js +53 -0
- package/lib/esm/ca/index.d.ts +1 -0
- package/lib/esm/ca/index.js +3 -1
- package/lib/esm/in/index.d.ts +1 -0
- package/lib/esm/in/index.js +3 -1
- package/lib/esm/in/vid.d.ts +2 -0
- package/lib/esm/in/vid.js +51 -0
- package/lib/esm/ua/edrpou.js +2 -2
- package/package.json +1 -1
- package/src/ca/bc_bhn.spec.ts +38 -0
- package/src/ca/bc_bhn.ts +88 -0
- package/src/ca/index.ts +1 -0
- package/src/de/vat.ts +1 -1
- package/src/fr/nif.spec.ts +13 -4
- package/src/in/index.ts +1 -0
- package/src/in/vid.spec.ts +34 -0
- package/src/in/vid.ts +84 -0
- package/src/ua/edrpou.spec.ts +8 -5
- package/src/ua/edrpou.ts +1 -1
- package/src/za/idnr.ts +1 -1
package/README.md
CHANGED
|
@@ -57,6 +57,7 @@ How you can help! This library currently support about half the countries in the
|
|
|
57
57
|
| Brazil | BR | CPF | Person | Brazilian identity number (Cadastro de Pessoas Físicas) |
|
|
58
58
|
| Brazil | BR | CNPJ | Company | Brazilian company number (Cadastro Nacional da Pessoa Jurídica) |
|
|
59
59
|
| Belarus | BY | UNP | Person/Company | Учетный номер плательщика, the Belarus VAT number |
|
|
60
|
+
| Canada | CA | BC_BHN | Person | British Columbia Personal Health Number |
|
|
60
61
|
| Canada | CA | BN | Company | Company Identifier (Canadian Business Number) |
|
|
61
62
|
| Canada | CA | GST | Company | Goods and service Tax Number |
|
|
62
63
|
| Canada | CA | PST | Company | Provincial Service Tax Number |
|
|
@@ -123,6 +124,7 @@ How you can help! This library currently support about half the countries in the
|
|
|
123
124
|
| India | IN | EPIC | Person | Electoral Photo Identity Card, Indian Voter ID |
|
|
124
125
|
| India | IN | GSTIN | Vat | Goods and Services Tax identification number, Indian VAT number |
|
|
125
126
|
| India | IN | PAN | Person | Permanent Account Number, Indian income tax identifier |
|
|
127
|
+
| India | IN | VIN | Person | Indian personal virtual identity number |
|
|
126
128
|
| Israel | IL | IDNR | Person | Identity Number (Mispar Zehut, מספר זהות, Israeli identity number) |
|
|
127
129
|
| Israel | IL | HR | Company | Company Number (מספר חברה, or short ח.פ. Israeli company number) |
|
|
128
130
|
| Italy | IT | AIC | Drug | Italian code for identification of drugs |
|
|
@@ -202,7 +204,7 @@ How you can help! This library currently support about half the countries in the
|
|
|
202
204
|
| Spain | ES | NIE | Person | Identity code foreigner (Número de Identificación de Extranjero) |
|
|
203
205
|
| Spain | ES | NIF | Tax | Tax Identifier (Número de Identificación Fiscal) |
|
|
204
206
|
| Spain | ES | NSS | Person | El número de Seguridad Social, Social Security Number |
|
|
205
|
-
| Sri Lanka | LK | NIC | Person | NIC Number
|
|
207
|
+
| Sri Lanka | LK | NIC | Person | NIC Number |
|
|
206
208
|
| Uruguay | UY | RUT | Tax/Vat | Tax Identifier (Registro Único Tributario) |
|
|
207
209
|
| Uruguay | UY | CEDULA | Person | Person Identifier (Cédula de Residencia) |
|
|
208
210
|
| Uruguay | UY | NIE | Person | ForeignersI identification Number |
|
|
@@ -237,4 +239,3 @@ versioning information.
|
|
|
237
239
|
|
|
238
240
|
This is based on the angular commit message format
|
|
239
241
|
https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-format
|
|
240
|
-
|
|
@@ -0,0 +1,89 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.compact = exports.format = exports.validate = exports.abbreviation = exports.localName = exports.name = void 0;
|
|
37
|
+
const exceptions = __importStar(require("../exceptions"));
|
|
38
|
+
const util_1 = require("../util");
|
|
39
|
+
const strings_1 = require("../util/strings");
|
|
40
|
+
function clean(input) {
|
|
41
|
+
return util_1.strings.cleanUnicode(input, ' -');
|
|
42
|
+
}
|
|
43
|
+
const impl = {
|
|
44
|
+
name: 'British Columbia Personal Health Number',
|
|
45
|
+
localName: 'British Columbia Personal Health Number',
|
|
46
|
+
abbreviation: 'BC_BHN',
|
|
47
|
+
compact(input) {
|
|
48
|
+
const [value, err] = clean(input);
|
|
49
|
+
if (err) {
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
},
|
|
54
|
+
format(input) {
|
|
55
|
+
const [value] = clean(input);
|
|
56
|
+
return (0, strings_1.splitAt)(value, 4, 7).join(' ');
|
|
57
|
+
},
|
|
58
|
+
validate(input) {
|
|
59
|
+
const [value, error] = clean(input);
|
|
60
|
+
if (error) {
|
|
61
|
+
return { isValid: false, error };
|
|
62
|
+
}
|
|
63
|
+
if (value.length !== 10) {
|
|
64
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
65
|
+
}
|
|
66
|
+
if (value[0] !== '9') {
|
|
67
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
68
|
+
}
|
|
69
|
+
if (!(0, strings_1.isdigits)(value)) {
|
|
70
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
71
|
+
}
|
|
72
|
+
const [, front, check] = util_1.strings.splitAt(value, 1, -1);
|
|
73
|
+
const sum = (0, util_1.weightedSum)(front, {
|
|
74
|
+
weights: [2, 4, 8, 5, 10, 9, 7, 3],
|
|
75
|
+
modulus: 11,
|
|
76
|
+
});
|
|
77
|
+
if (String((11 - sum) % 11) !== check) {
|
|
78
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
isValid: true,
|
|
82
|
+
compact: value,
|
|
83
|
+
isIndividual: true,
|
|
84
|
+
isCompany: false,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
exports.name = impl.name, exports.localName = impl.localName, exports.abbreviation = impl.abbreviation, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmNfYmhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NhL2JjX2Jobi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsMERBQTRDO0FBQzVDLGtDQUErQztBQUUvQyw2Q0FBb0Q7QUFFcEQsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixPQUFPLGNBQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLElBQUksR0FBYztJQUN0QixJQUFJLEVBQUUseUNBQXlDO0lBQy9DLFNBQVMsRUFBRSx5Q0FBeUM7SUFDcEQsWUFBWSxFQUFFLFFBQVE7SUFFdEIsT0FBTyxDQUFDLEtBQWE7UUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IsT0FBTyxJQUFBLGlCQUFPLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxrQkFBUSxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxjQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RCxNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFXLEVBQUMsS0FBSyxFQUFFO1lBQzdCLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUNyRSxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFYSxZQUFJLEdBQ2pCLElBQUksT0FEZSxpQkFBUyxHQUM1QixJQUFJLFlBRDBCLG9CQUFZLEdBQzFDLElBQUksZUFEd0MsZ0JBQVEsR0FDcEQsSUFBSSxXQURrRCxjQUFNLEdBQzVELElBQUksU0FEMEQsZUFBTyxHQUNyRSxJQUFJLFNBQUMifQ==
|
package/lib/cjs/ca/index.d.ts
CHANGED
package/lib/cjs/ca/index.js
CHANGED
|
@@ -33,10 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.pst = exports.qst = exports.gst = exports.sin = exports.bn = void 0;
|
|
36
|
+
exports.bc_bhn = exports.pst = exports.qst = exports.gst = exports.sin = exports.bn = void 0;
|
|
37
37
|
exports.bn = __importStar(require("./bn"));
|
|
38
38
|
exports.sin = __importStar(require("./sin"));
|
|
39
39
|
exports.gst = __importStar(require("./gst"));
|
|
40
40
|
exports.qst = __importStar(require("./qst"));
|
|
41
41
|
exports.pst = __importStar(require("./pst"));
|
|
42
|
-
|
|
42
|
+
exports.bc_bhn = __importStar(require("./bc_bhn"));
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2EvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTJCO0FBQzNCLDZDQUE2QjtBQUM3Qiw2Q0FBNkI7QUFDN0IsNkNBQTZCO0FBQzdCLDZDQUE2QjtBQUM3QixtREFBbUMifQ==
|
package/lib/cjs/in/index.d.ts
CHANGED
package/lib/cjs/in/index.js
CHANGED
|
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.gstin = exports.epic = exports.pan = exports.aadhaar = void 0;
|
|
36
|
+
exports.gstin = exports.epic = exports.vid = exports.pan = exports.aadhaar = void 0;
|
|
37
37
|
exports.aadhaar = __importStar(require("./aadhaar"));
|
|
38
38
|
exports.pan = __importStar(require("./pan"));
|
|
39
|
+
exports.vid = __importStar(require("./vid"));
|
|
39
40
|
exports.epic = __importStar(require("./epic"));
|
|
40
41
|
exports.gstin = __importStar(require("./gstin"));
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQXFDO0FBQ3JDLDZDQUE2QjtBQUM3Qiw2Q0FBNkI7QUFDN0IsK0NBQStCO0FBQy9CLGlEQUFpQyJ9
|
|
@@ -0,0 +1,87 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.compact = exports.format = exports.validate = exports.abbreviation = exports.localName = exports.name = void 0;
|
|
37
|
+
const exceptions = __importStar(require("../exceptions"));
|
|
38
|
+
const util_1 = require("../util");
|
|
39
|
+
const checksum_1 = require("../util/checksum");
|
|
40
|
+
function clean(input) {
|
|
41
|
+
return util_1.strings.cleanUnicode(input, ' -');
|
|
42
|
+
}
|
|
43
|
+
const validRE = /^[2-9][0-9]{15}$/;
|
|
44
|
+
const impl = {
|
|
45
|
+
name: 'Indian personal virtual identity number',
|
|
46
|
+
localName: 'Indian personal virtual identity number',
|
|
47
|
+
abbreviation: 'VIN',
|
|
48
|
+
compact(input) {
|
|
49
|
+
const [value, err] = clean(input);
|
|
50
|
+
if (err) {
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
},
|
|
55
|
+
format(input) {
|
|
56
|
+
const [value] = clean(input);
|
|
57
|
+
return util_1.strings.splitAt(value, 4, 8, 12).join(' ');
|
|
58
|
+
},
|
|
59
|
+
validate(input) {
|
|
60
|
+
const [value, error] = clean(input);
|
|
61
|
+
if (error) {
|
|
62
|
+
return { isValid: false, error };
|
|
63
|
+
}
|
|
64
|
+
if (value.length !== 16) {
|
|
65
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
66
|
+
}
|
|
67
|
+
if (!validRE.test(value)) {
|
|
68
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
69
|
+
}
|
|
70
|
+
const r = value.split('');
|
|
71
|
+
r.reverse();
|
|
72
|
+
if (value === r.join('')) {
|
|
73
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
74
|
+
}
|
|
75
|
+
if (!(0, checksum_1.verhoeffValidate)(value)) {
|
|
76
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
isValid: true,
|
|
80
|
+
compact: value,
|
|
81
|
+
isIndividual: true,
|
|
82
|
+
isCompany: false,
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
exports.name = impl.name, exports.localName = impl.localName, exports.abbreviation = impl.abbreviation, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luL3ZpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsMERBQTRDO0FBQzVDLGtDQUFrQztBQUVsQywrQ0FBb0Q7QUFFcEQsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixPQUFPLGNBQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFHRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztBQUVuQyxNQUFNLElBQUksR0FBYztJQUN0QixJQUFJLEVBQUUseUNBQXlDO0lBQy9DLFNBQVMsRUFBRSx5Q0FBeUM7SUFDcEQsWUFBWSxFQUFFLEtBQUs7SUFDbkIsT0FBTyxDQUFDLEtBQWE7UUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IsT0FBTyxjQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1osSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFHRCxJQUFJLENBQUMsSUFBQSwyQkFBZ0IsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVhLFlBQUksR0FDakIsSUFBSSxPQURlLGlCQUFTLEdBQzVCLElBQUksWUFEMEIsb0JBQVksR0FDMUMsSUFBSSxlQUR3QyxnQkFBUSxHQUNwRCxJQUFJLFdBRGtELGNBQU0sR0FDNUQsSUFBSSxTQUQwRCxlQUFPLEdBQ3JFLElBQUksU0FBQyJ9
|
package/lib/cjs/ua/edrpou.js
CHANGED
|
@@ -79,7 +79,7 @@ const impl = {
|
|
|
79
79
|
modulus: 11,
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
-
if (String(sum) !== check) {
|
|
82
|
+
if (String(sum % 10) !== check) {
|
|
83
83
|
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
84
84
|
}
|
|
85
85
|
return {
|
|
@@ -91,4 +91,4 @@ const impl = {
|
|
|
91
91
|
},
|
|
92
92
|
};
|
|
93
93
|
exports.name = impl.name, exports.localName = impl.localName, exports.abbreviation = impl.abbreviation, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRycG91LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VhL2VkcnBvdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSwwREFBNEM7QUFDNUMsa0NBQStDO0FBRy9DLFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDMUIsT0FBTyxjQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQWM7SUFDdEIsSUFBSSxFQUFFLG1FQUFtRTtJQUN6RSxTQUFTLEVBQUUsK0RBQStEO0lBQzFFLFlBQVksRUFBRSxRQUFRO0lBQ3RCLE9BQU8sQ0FBQyxLQUFhO1FBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLGNBQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFCLElBQUksR0FBRyxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTztZQUNQLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBRUgsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDZixHQUFHLEdBQUcsSUFBQSxrQkFBVyxFQUFDLEtBQUssRUFBRTtnQkFDdkIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsRUFBRTthQUNaLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxLQUFLO1lBQ2QsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRWEsWUFBSSxHQUNqQixJQUFJLE9BRGUsaUJBQVMsR0FDNUIsSUFBSSxZQUQwQixvQkFBWSxHQUMxQyxJQUFJLGVBRHdDLGdCQUFRLEdBQ3BELElBQUksV0FEa0QsY0FBTSxHQUM1RCxJQUFJLFNBRDBELGVBQU8sR0FDckUsSUFBSSxTQUFDIn0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as exceptions from '../exceptions';
|
|
2
|
+
import { strings, weightedSum } from '../util';
|
|
3
|
+
import { isdigits, splitAt } from '../util/strings';
|
|
4
|
+
function clean(input) {
|
|
5
|
+
return strings.cleanUnicode(input, ' -');
|
|
6
|
+
}
|
|
7
|
+
const impl = {
|
|
8
|
+
name: 'British Columbia Personal Health Number',
|
|
9
|
+
localName: 'British Columbia Personal Health Number',
|
|
10
|
+
abbreviation: 'BC_BHN',
|
|
11
|
+
compact(input) {
|
|
12
|
+
const [value, err] = clean(input);
|
|
13
|
+
if (err) {
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
},
|
|
18
|
+
format(input) {
|
|
19
|
+
const [value] = clean(input);
|
|
20
|
+
return splitAt(value, 4, 7).join(' ');
|
|
21
|
+
},
|
|
22
|
+
validate(input) {
|
|
23
|
+
const [value, error] = clean(input);
|
|
24
|
+
if (error) {
|
|
25
|
+
return { isValid: false, error };
|
|
26
|
+
}
|
|
27
|
+
if (value.length !== 10) {
|
|
28
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
29
|
+
}
|
|
30
|
+
if (value[0] !== '9') {
|
|
31
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
32
|
+
}
|
|
33
|
+
if (!isdigits(value)) {
|
|
34
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
35
|
+
}
|
|
36
|
+
const [, front, check] = strings.splitAt(value, 1, -1);
|
|
37
|
+
const sum = weightedSum(front, {
|
|
38
|
+
weights: [2, 4, 8, 5, 10, 9, 7, 3],
|
|
39
|
+
modulus: 11,
|
|
40
|
+
});
|
|
41
|
+
if (String((11 - sum) % 11) !== check) {
|
|
42
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
isValid: true,
|
|
46
|
+
compact: value,
|
|
47
|
+
isIndividual: true,
|
|
48
|
+
isCompany: false,
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmNfYmhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NhL2JjX2Jobi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxTQUFTLEtBQUssQ0FBQyxLQUFhO0lBQzFCLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFjO0lBQ3RCLElBQUksRUFBRSx5Q0FBeUM7SUFDL0MsU0FBUyxFQUFFLHlDQUF5QztJQUNwRCxZQUFZLEVBQUUsUUFBUTtJQUV0QixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDN0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FDdkUsSUFBSSxDQUFDIn0=
|
package/lib/esm/ca/index.d.ts
CHANGED
package/lib/esm/ca/index.js
CHANGED
|
@@ -8,4 +8,6 @@ import * as qst_1 from './qst';
|
|
|
8
8
|
export { qst_1 as qst };
|
|
9
9
|
import * as pst_1 from './pst';
|
|
10
10
|
export { pst_1 as pst };
|
|
11
|
-
|
|
11
|
+
import * as bc_bhn_1 from './bc_bhn';
|
|
12
|
+
export { bc_bhn_1 as bc_bhn };
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2EvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6InNCQUFvQixNQUFNO2lCQUFkLEVBQUU7dUJBQ08sT0FBTztrQkFBaEIsR0FBRzt1QkFDTSxPQUFPO2tCQUFoQixHQUFHO3VCQUNNLE9BQU87a0JBQWhCLEdBQUc7dUJBQ00sT0FBTztrQkFBaEIsR0FBRzswQkFDUyxVQUFVO3FCQUF0QixNQUFNIn0=
|
package/lib/esm/in/index.d.ts
CHANGED
package/lib/esm/in/index.js
CHANGED
|
@@ -2,8 +2,10 @@ import * as aadhaar_1 from './aadhaar';
|
|
|
2
2
|
export { aadhaar_1 as aadhaar };
|
|
3
3
|
import * as pan_1 from './pan';
|
|
4
4
|
export { pan_1 as pan };
|
|
5
|
+
import * as vid_1 from './vid';
|
|
6
|
+
export { vid_1 as vid };
|
|
5
7
|
import * as epic_1 from './epic';
|
|
6
8
|
export { epic_1 as epic };
|
|
7
9
|
import * as gstin_1 from './gstin';
|
|
8
10
|
export { gstin_1 as gstin };
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjJCQUF5QixXQUFXO3NCQUF4QixPQUFPO3VCQUNFLE9BQU87a0JBQWhCLEdBQUc7dUJBQ00sT0FBTztrQkFBaEIsR0FBRzt3QkFDTyxRQUFRO21CQUFsQixJQUFJO3lCQUNPLFNBQVM7b0JBQXBCLEtBQUsifQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as exceptions from '../exceptions';
|
|
2
|
+
import { strings } from '../util';
|
|
3
|
+
import { verhoeffValidate } from '../util/checksum';
|
|
4
|
+
function clean(input) {
|
|
5
|
+
return strings.cleanUnicode(input, ' -');
|
|
6
|
+
}
|
|
7
|
+
const validRE = /^[2-9][0-9]{15}$/;
|
|
8
|
+
const impl = {
|
|
9
|
+
name: 'Indian personal virtual identity number',
|
|
10
|
+
localName: 'Indian personal virtual identity number',
|
|
11
|
+
abbreviation: 'VIN',
|
|
12
|
+
compact(input) {
|
|
13
|
+
const [value, err] = clean(input);
|
|
14
|
+
if (err) {
|
|
15
|
+
throw err;
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
},
|
|
19
|
+
format(input) {
|
|
20
|
+
const [value] = clean(input);
|
|
21
|
+
return strings.splitAt(value, 4, 8, 12).join(' ');
|
|
22
|
+
},
|
|
23
|
+
validate(input) {
|
|
24
|
+
const [value, error] = clean(input);
|
|
25
|
+
if (error) {
|
|
26
|
+
return { isValid: false, error };
|
|
27
|
+
}
|
|
28
|
+
if (value.length !== 16) {
|
|
29
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
30
|
+
}
|
|
31
|
+
if (!validRE.test(value)) {
|
|
32
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
33
|
+
}
|
|
34
|
+
const r = value.split('');
|
|
35
|
+
r.reverse();
|
|
36
|
+
if (value === r.join('')) {
|
|
37
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
38
|
+
}
|
|
39
|
+
if (!verhoeffValidate(value)) {
|
|
40
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
isValid: true,
|
|
44
|
+
compact: value,
|
|
45
|
+
isIndividual: true,
|
|
46
|
+
isCompany: false,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luL3ZpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxTQUFTLEtBQUssQ0FBQyxLQUFhO0lBQzFCLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUdELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDO0FBRW5DLE1BQU0sSUFBSSxHQUFjO0lBQ3RCLElBQUksRUFBRSx5Q0FBeUM7SUFDL0MsU0FBUyxFQUFFLHlDQUF5QztJQUNwRCxZQUFZLEVBQUUsS0FBSztJQUNuQixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FDdkUsSUFBSSxDQUFDIn0=
|
package/lib/esm/ua/edrpou.js
CHANGED
|
@@ -43,7 +43,7 @@ const impl = {
|
|
|
43
43
|
modulus: 11,
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
if (String(sum) !== check) {
|
|
46
|
+
if (String(sum % 10) !== check) {
|
|
47
47
|
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
48
48
|
}
|
|
49
49
|
return {
|
|
@@ -55,4 +55,4 @@ const impl = {
|
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
57
|
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRycG91LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VhL2VkcnBvdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcvQyxTQUFTLEtBQUssQ0FBQyxLQUFhO0lBQzFCLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFjO0lBQ3RCLElBQUksRUFBRSxtRUFBbUU7SUFDekUsU0FBUyxFQUFFLCtEQUErRDtJQUMxRSxZQUFZLEVBQUUsUUFBUTtJQUN0QixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxQixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzNCLE9BQU87WUFDUCxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2YsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxLQUFLO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FDdkUsSUFBSSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { validate, format } from './bc_bhn';
|
|
2
|
+
import {
|
|
3
|
+
InvalidChecksum,
|
|
4
|
+
InvalidComponent,
|
|
5
|
+
InvalidFormat,
|
|
6
|
+
} from '../exceptions';
|
|
7
|
+
|
|
8
|
+
describe('ca/bc_bhn', () => {
|
|
9
|
+
it('format:9698658215', () => {
|
|
10
|
+
const result = format('9698658215');
|
|
11
|
+
|
|
12
|
+
expect(result).toEqual('9698 658 215');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test.each(['9698 658 215'])('validate:%s', value => {
|
|
16
|
+
const result = validate(value);
|
|
17
|
+
|
|
18
|
+
expect(result.isValid).toEqual(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('validate:9736A04212', () => {
|
|
22
|
+
const result = validate('9736A04212');
|
|
23
|
+
|
|
24
|
+
expect(result.error).toBeInstanceOf(InvalidFormat);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('validate:5736504210', () => {
|
|
28
|
+
const result = validate('5736504210');
|
|
29
|
+
|
|
30
|
+
expect(result.error).toBeInstanceOf(InvalidComponent);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('validate:9698648215', () => {
|
|
34
|
+
const result = validate('9698648215');
|
|
35
|
+
|
|
36
|
+
expect(result.error).toBeInstanceOf(InvalidChecksum);
|
|
37
|
+
});
|
|
38
|
+
});
|
package/src/ca/bc_bhn.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BC PHN (British Columbia Personal Health Number).
|
|
3
|
+
*
|
|
4
|
+
* A unique, numerical, lifetime identifier used in the specific identification
|
|
5
|
+
* of an individual client or patient who has had any interaction with the
|
|
6
|
+
* British Columbia health system. It is assigned only to and used by one person
|
|
7
|
+
* and will not be assigned to any other person.
|
|
8
|
+
* The existence of a PHN does not imply eligibility for health care services in
|
|
9
|
+
* BC or provide any indication of an individual’s benefit status.
|
|
10
|
+
*
|
|
11
|
+
* The PNH is a 10-digit number where the first digit is always 9, and the last
|
|
12
|
+
* digit is a MOD-11 check digit.
|
|
13
|
+
*
|
|
14
|
+
* Source:
|
|
15
|
+
* https://www2.gov.bc.ca/gov/content/health/health-drug-coverage/msp/bc-residents/personal-health-identification
|
|
16
|
+
* https://www2.gov.bc.ca/assets/gov/health/practitioner-pro/software-development-guidelines/conformance-standards/vol-4b-app-rules-client-registry.pdf
|
|
17
|
+
*
|
|
18
|
+
* PERSON
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import * as exceptions from '../exceptions';
|
|
22
|
+
import { strings, weightedSum } from '../util';
|
|
23
|
+
import { Validator, ValidateReturn } from '../types';
|
|
24
|
+
import { isdigits, splitAt } from '../util/strings';
|
|
25
|
+
|
|
26
|
+
function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
|
|
27
|
+
return strings.cleanUnicode(input, ' -');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const impl: Validator = {
|
|
31
|
+
name: 'British Columbia Personal Health Number',
|
|
32
|
+
localName: 'British Columbia Personal Health Number',
|
|
33
|
+
abbreviation: 'BC_BHN',
|
|
34
|
+
|
|
35
|
+
compact(input: string): string {
|
|
36
|
+
const [value, err] = clean(input);
|
|
37
|
+
|
|
38
|
+
if (err) {
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return value;
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
format(input: string): string {
|
|
46
|
+
const [value] = clean(input);
|
|
47
|
+
|
|
48
|
+
return splitAt(value, 4, 7).join(' ');
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
validate(input: string): ValidateReturn {
|
|
52
|
+
const [value, error] = clean(input);
|
|
53
|
+
|
|
54
|
+
if (error) {
|
|
55
|
+
return { isValid: false, error };
|
|
56
|
+
}
|
|
57
|
+
if (value.length !== 10) {
|
|
58
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
59
|
+
}
|
|
60
|
+
if (value[0] !== '9') {
|
|
61
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
62
|
+
}
|
|
63
|
+
if (!isdigits(value)) {
|
|
64
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const [, front, check] = strings.splitAt(value, 1, -1);
|
|
68
|
+
|
|
69
|
+
const sum = weightedSum(front, {
|
|
70
|
+
weights: [2, 4, 8, 5, 10, 9, 7, 3],
|
|
71
|
+
modulus: 11,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
if (String((11 - sum) % 11) !== check) {
|
|
75
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
isValid: true,
|
|
80
|
+
compact: value,
|
|
81
|
+
isIndividual: true,
|
|
82
|
+
isCompany: false,
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
88
|
+
impl;
|
package/src/ca/index.ts
CHANGED
package/src/de/vat.ts
CHANGED
package/src/fr/nif.spec.ts
CHANGED
|
@@ -8,13 +8,22 @@ describe('fr/nif', () => {
|
|
|
8
8
|
expect(result).toEqual('07 01 987 765 432');
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
const result =
|
|
11
|
+
it('format:3023217600053', () => {
|
|
12
|
+
const result = format('3023217600053');
|
|
13
13
|
|
|
14
|
-
expect(result
|
|
14
|
+
expect(result).toEqual('30 23 217 600 053');
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
test.each(['
|
|
17
|
+
test.each(['3023217600053', '0701987765493', '3023217600053'])(
|
|
18
|
+
'validate:%s',
|
|
19
|
+
value => {
|
|
20
|
+
const result = validate(value);
|
|
21
|
+
|
|
22
|
+
expect(result.isValid && result.compact).toEqual(value);
|
|
23
|
+
},
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
test.each(['0000000000000', '3023217600054'])('validate:%s', value => {
|
|
18
27
|
const result = validate(value);
|
|
19
28
|
|
|
20
29
|
expect(result.isValid).toEqual(false);
|
package/src/in/index.ts
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { validate, format } from './vid';
|
|
2
|
+
import { InvalidLength, InvalidFormat, InvalidChecksum } from '../exceptions';
|
|
3
|
+
|
|
4
|
+
describe('in/vid', () => {
|
|
5
|
+
it('format:2341234123412342', () => {
|
|
6
|
+
const result = format('2341234123412342');
|
|
7
|
+
|
|
8
|
+
expect(result).toEqual('2341 2341 2341 2342');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test.each(['2341234123412341'])('validate:%s', value => {
|
|
12
|
+
const result = validate(value);
|
|
13
|
+
|
|
14
|
+
expect(result.isValid).toEqual(true);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test.each(['13'])('validate:%s', value => {
|
|
18
|
+
const result = validate(value);
|
|
19
|
+
|
|
20
|
+
expect(result.error).toBeInstanceOf(InvalidLength);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test.each(['1341234123412341', '2222222222222222'])('validate:%s', value => {
|
|
24
|
+
const result = validate(value);
|
|
25
|
+
|
|
26
|
+
expect(result.error).toBeInstanceOf(InvalidFormat);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test.each(['2341234123412342'])('validate:%s', value => {
|
|
30
|
+
const result = validate(value);
|
|
31
|
+
|
|
32
|
+
expect(result.error).toBeInstanceOf(InvalidChecksum);
|
|
33
|
+
});
|
|
34
|
+
});
|
package/src/in/vid.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VID (Indian personal virtual identity number).
|
|
3
|
+
*
|
|
4
|
+
* VID is a temporary, revocable 16-digit random number mapped with the Aadhaar number.
|
|
5
|
+
* VID is used in lieu of Aadhaar number whenever authentication or e-KYC services
|
|
6
|
+
* are performed.
|
|
7
|
+
* VID is made up of 16 digits where the last digits is a check digit
|
|
8
|
+
* calculated using the Verhoeff algorithm. The numbers are generated in a
|
|
9
|
+
* random, non-repeating sequence and do not begin with 0 or 1.
|
|
10
|
+
*
|
|
11
|
+
* Source:
|
|
12
|
+
* https://uidai.gov.in/en/contact-support/have-any-question/284-faqs/aadhaar-online-services/virtual-id-vid.html
|
|
13
|
+
* https://uidai.gov.in/images/resource/UIDAI_Circular_11012018.pdf
|
|
14
|
+
*
|
|
15
|
+
* PERSON
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as exceptions from '../exceptions';
|
|
19
|
+
import { strings } from '../util';
|
|
20
|
+
import { Validator, ValidateReturn } from '../types';
|
|
21
|
+
import { verhoeffValidate } from '../util/checksum';
|
|
22
|
+
|
|
23
|
+
function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
|
|
24
|
+
return strings.cleanUnicode(input, ' -');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Regular expression used to check syntax of VID numbers.
|
|
28
|
+
const validRE = /^[2-9][0-9]{15}$/;
|
|
29
|
+
|
|
30
|
+
const impl: Validator = {
|
|
31
|
+
name: 'Indian personal virtual identity number',
|
|
32
|
+
localName: 'Indian personal virtual identity number',
|
|
33
|
+
abbreviation: 'VIN',
|
|
34
|
+
compact(input: string): string {
|
|
35
|
+
const [value, err] = clean(input);
|
|
36
|
+
|
|
37
|
+
if (err) {
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return value;
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
format(input: string): string {
|
|
45
|
+
const [value] = clean(input);
|
|
46
|
+
|
|
47
|
+
return strings.splitAt(value, 4, 8, 12).join(' ');
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
validate(input: string): ValidateReturn {
|
|
51
|
+
const [value, error] = clean(input);
|
|
52
|
+
|
|
53
|
+
if (error) {
|
|
54
|
+
return { isValid: false, error };
|
|
55
|
+
}
|
|
56
|
+
if (value.length !== 16) {
|
|
57
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
58
|
+
}
|
|
59
|
+
if (!validRE.test(value)) {
|
|
60
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
61
|
+
}
|
|
62
|
+
// Value cannot be a palindrome
|
|
63
|
+
const r = value.split('');
|
|
64
|
+
r.reverse();
|
|
65
|
+
if (value === r.join('')) {
|
|
66
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// checksum check
|
|
70
|
+
if (!verhoeffValidate(value)) {
|
|
71
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
isValid: true,
|
|
76
|
+
compact: value,
|
|
77
|
+
isIndividual: true,
|
|
78
|
+
isCompany: false,
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
84
|
+
impl;
|
package/src/ua/edrpou.spec.ts
CHANGED
|
@@ -8,11 +8,14 @@ describe('ua/edrpou', () => {
|
|
|
8
8
|
expect(result).toEqual('32855961');
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
test.each(['32855961', '23226362', '23246880', '25083040'])(
|
|
12
|
+
'validate:%s',
|
|
13
|
+
value => {
|
|
14
|
+
const result = validate(value);
|
|
15
|
+
|
|
16
|
+
expect(result.isValid && result.compact).toEqual(value);
|
|
17
|
+
},
|
|
18
|
+
);
|
|
16
19
|
|
|
17
20
|
it('validate:12345', () => {
|
|
18
21
|
const result = validate('12345');
|
package/src/ua/edrpou.ts
CHANGED