stdnum 1.10.3 → 1.10.5

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 CHANGED
@@ -202,6 +202,7 @@ How you can help! This library currently support about half the countries in the
202
202
  | Spain | ES | NIE | Person | Identity code foreigner (Número de Identificación de Extranjero) |
203
203
  | Spain | ES | NIF | Tax | Tax Identifier (Número de Identificación Fiscal) |
204
204
  | Spain | ES | NSS | Person | El número de Seguridad Social, Social Security Number |
205
+ | Sri Lanka | LK | NIC | Person | NIC Number |
205
206
  | Uruguay | UY | RUT | Tax/Vat | Tax Identifier (Registro Único Tributario) |
206
207
  | Uruguay | UY | CEDULA | Person | Person Identifier (Cédula de Residencia) |
207
208
  | Uruguay | UY | NIE | Person | ForeignersI identification Number |
@@ -9,14 +9,14 @@ class ValidationError extends Error {
9
9
  }
10
10
  exports.ValidationError = ValidationError;
11
11
  class InvalidFormat extends ValidationError {
12
- constructor(msg = 'The number has an invlidad format.') {
12
+ constructor(msg = 'The number has an invalid format.') {
13
13
  super(msg);
14
14
  this.name = 'InvalidFormat';
15
15
  }
16
16
  }
17
17
  exports.InvalidFormat = InvalidFormat;
18
18
  class InvalidChecksum extends ValidationError {
19
- constructor(msg = "The number number's checksum or check digit is invalid.") {
19
+ constructor(msg = "The number checksum or check digit is invalid.") {
20
20
  super(msg);
21
21
  this.name = 'InvalidChecksum';
22
22
  }
@@ -36,4 +36,4 @@ class InvalidComponent extends ValidationError {
36
36
  }
37
37
  }
38
38
  exports.InvalidComponent = InvalidComponent;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWFBLE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBUUQsTUFBYSxhQUFjLFNBQVEsZUFBZTtJQUNoRCxZQUFZLEdBQUcsR0FBRyxvQ0FBb0M7UUFDcEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFLRCxNQUFhLGVBQWdCLFNBQVEsZUFBZTtJQUNsRCxZQUFZLEdBQUcsR0FBRyx5REFBeUQ7UUFDekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFMRCwwQ0FLQztBQUtELE1BQWEsYUFBYyxTQUFRLGVBQWU7SUFDaEQsWUFBWSxHQUFHLEdBQUcsbUNBQW1DO1FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUxELHNDQUtDO0FBU0QsTUFBYSxnQkFBaUIsU0FBUSxlQUFlO0lBQ25ELFlBQVksR0FBRyxHQUFHLHdEQUF3RDtRQUN4RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUxELDRDQUtDIn0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWFBLE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBUUQsTUFBYSxhQUFjLFNBQVEsZUFBZTtJQUNoRCxZQUFZLEdBQUcsR0FBRyxtQ0FBbUM7UUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFLRCxNQUFhLGVBQWdCLFNBQVEsZUFBZTtJQUNsRCxZQUFZLEdBQUcsR0FBRyxnREFBZ0Q7UUFDaEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFMRCwwQ0FLQztBQUtELE1BQWEsYUFBYyxTQUFRLGVBQWU7SUFDaEQsWUFBWSxHQUFHLEdBQUcsbUNBQW1DO1FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUxELHNDQUtDO0FBU0QsTUFBYSxnQkFBaUIsU0FBUSxlQUFlO0lBQ25ELFlBQVksR0FBRyxHQUFHLHdEQUF3RDtRQUN4RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUxELDRDQUtDIn0=
@@ -0,0 +1 @@
1
+ export * as nic from './nic';
@@ -0,0 +1,28 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.nic = void 0;
27
+ exports.nic = __importStar(require("./nic"));
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGsvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBNkIifQ==
@@ -0,0 +1,2 @@
1
+ import { ValidateReturn } from '../types';
2
+ export declare const name: string, localName: string, validate: (value: string) => ValidateReturn, format: (value: string) => string, compact: (value: string) => string;
@@ -0,0 +1,66 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.compact = exports.format = exports.validate = exports.localName = exports.name = void 0;
27
+ const exceptions = __importStar(require("../exceptions"));
28
+ const util_1 = require("../util");
29
+ function clean(input) {
30
+ return util_1.strings.cleanUnicode(input, ' -');
31
+ }
32
+ const impl = {
33
+ name: 'Sri Lankan National Identity Card Number',
34
+ localName: 'NIC Number',
35
+ compact(input) {
36
+ const [value, err] = clean(input);
37
+ if (err) {
38
+ throw err;
39
+ }
40
+ return value;
41
+ },
42
+ format(input) {
43
+ const [value] = clean(input);
44
+ return value.toLowerCase();
45
+ },
46
+ validate(input) {
47
+ const [value, error] = clean(input);
48
+ if (error) {
49
+ return { isValid: false, error };
50
+ }
51
+ if (value.length !== 10 && value.length !== 12) {
52
+ return { isValid: false, error: new exceptions.InvalidLength() };
53
+ }
54
+ if (!/^[\d]{9}[vVxX]$|^[\d]{12}$/.test(value)) {
55
+ return { isValid: false, error: new exceptions.InvalidFormat('Invalid NIC format') };
56
+ }
57
+ return {
58
+ isValid: true,
59
+ compact: value,
60
+ isIndividual: true,
61
+ isCompany: false,
62
+ };
63
+ },
64
+ };
65
+ exports.name = impl.name, exports.localName = impl.localName, exports.validate = impl.validate, exports.format = impl.format, exports.compact = impl.compact;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xrL25pYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLDBEQUE0QztBQUM1QyxrQ0FBa0M7QUFHbEMsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixPQUFPLGNBQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLElBQUksR0FBYztJQUN0QixJQUFJLEVBQUUsMENBQTBDO0lBQ2hELFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFhO1FBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUcsS0FBSyxDQUFDLE1BQU0sS0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBRyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBR0QsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVhLFlBQUksR0FBMkMsSUFBSSxPQUE3QyxpQkFBUyxHQUFnQyxJQUFJLFlBQWxDLGdCQUFRLEdBQXNCLElBQUksV0FBeEIsY0FBTSxHQUFjLElBQUksU0FBaEIsZUFBTyxHQUFLLElBQUksU0FBQyJ9
@@ -5,13 +5,13 @@ export class ValidationError extends Error {
5
5
  }
6
6
  }
7
7
  export class InvalidFormat extends ValidationError {
8
- constructor(msg = 'The number has an invlidad format.') {
8
+ constructor(msg = 'The number has an invalid format.') {
9
9
  super(msg);
10
10
  this.name = 'InvalidFormat';
11
11
  }
12
12
  }
13
13
  export class InvalidChecksum extends ValidationError {
14
- constructor(msg = "The number number's checksum or check digit is invalid.") {
14
+ constructor(msg = "The number checksum or check digit is invalid.") {
15
15
  super(msg);
16
16
  this.name = 'InvalidChecksum';
17
17
  }
@@ -28,4 +28,4 @@ export class InvalidComponent extends ValidationError {
28
28
  this.name = 'InvalidComponent';
29
29
  }
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBUUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxlQUFlO0lBQ2hELFlBQVksR0FBRyxHQUFHLG9DQUFvQztRQUNwRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFLRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBQ2xELFlBQVksR0FBRyxHQUFHLHlEQUF5RDtRQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUtELE1BQU0sT0FBTyxhQUFjLFNBQVEsZUFBZTtJQUNoRCxZQUFZLEdBQUcsR0FBRyxtQ0FBbUM7UUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBU0QsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFDbkQsWUFBWSxHQUFHLEdBQUcsd0RBQXdEO1FBQ3hFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBUUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxlQUFlO0lBQ2hELFlBQVksR0FBRyxHQUFHLG1DQUFtQztRQUNuRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFLRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBQ2xELFlBQVksR0FBRyxHQUFHLGdEQUFnRDtRQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUtELE1BQU0sT0FBTyxhQUFjLFNBQVEsZUFBZTtJQUNoRCxZQUFZLEdBQUcsR0FBRyxtQ0FBbUM7UUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBU0QsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFDbkQsWUFBWSxHQUFHLEdBQUcsd0RBQXdEO1FBQ3hFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGIn0=
@@ -0,0 +1 @@
1
+ export * as nic from './nic';
@@ -0,0 +1,3 @@
1
+ import * as nic_1 from './nic';
2
+ export { nic_1 as nic };
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGsvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6InVCQUFxQixPQUFPO2tCQUFoQixHQUFHIn0=
@@ -0,0 +1,2 @@
1
+ import { ValidateReturn } from '../types';
2
+ export declare const name: string, localName: string, validate: (value: string) => ValidateReturn, format: (value: string) => string, compact: (value: string) => string;
@@ -0,0 +1,40 @@
1
+ import * as exceptions from '../exceptions';
2
+ import { strings } from '../util';
3
+ function clean(input) {
4
+ return strings.cleanUnicode(input, ' -');
5
+ }
6
+ const impl = {
7
+ name: 'Sri Lankan National Identity Card Number',
8
+ localName: 'NIC Number',
9
+ compact(input) {
10
+ const [value, err] = clean(input);
11
+ if (err) {
12
+ throw err;
13
+ }
14
+ return value;
15
+ },
16
+ format(input) {
17
+ const [value] = clean(input);
18
+ return value.toLowerCase();
19
+ },
20
+ validate(input) {
21
+ const [value, error] = clean(input);
22
+ if (error) {
23
+ return { isValid: false, error };
24
+ }
25
+ if (value.length !== 10 && value.length !== 12) {
26
+ return { isValid: false, error: new exceptions.InvalidLength() };
27
+ }
28
+ if (!/^[\d]{9}[vVxX]$|^[\d]{12}$/.test(value)) {
29
+ return { isValid: false, error: new exceptions.InvalidFormat('Invalid NIC format') };
30
+ }
31
+ return {
32
+ isValid: true,
33
+ compact: value,
34
+ isIndividual: true,
35
+ isCompany: false,
36
+ };
37
+ },
38
+ };
39
+ export const { name, localName, validate, format, compact } = impl;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xrL25pYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR2xDLFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDMUIsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQWM7SUFDdEIsSUFBSSxFQUFFLDBDQUEwQztJQUNoRCxTQUFTLEVBQUUsWUFBWTtJQUN2QixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUcsRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUdELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUN2RixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stdnum",
3
- "version": "1.10.3",
3
+ "version": "1.10.5",
4
4
  "description": "Standard Number Validation",
5
5
  "files": [
6
6
  "README.md",
package/src/exceptions.ts CHANGED
@@ -25,7 +25,7 @@ export class ValidationError extends Error {
25
25
  * part of the number or required parts are missing.
26
26
  */
27
27
  export class InvalidFormat extends ValidationError {
28
- constructor(msg = 'The number has an invlidad format.') {
28
+ constructor(msg = 'The number has an invalid format.') {
29
29
  super(msg);
30
30
  this.name = 'InvalidFormat';
31
31
  }
@@ -35,7 +35,7 @@ export class InvalidFormat extends ValidationError {
35
35
  * The number's internal checksum or check digit does not match.
36
36
  */
37
37
  export class InvalidChecksum extends ValidationError {
38
- constructor(msg = "The number number's checksum or check digit is invalid.") {
38
+ constructor(msg = "The number checksum or check digit is invalid.") {
39
39
  super(msg);
40
40
  this.name = 'InvalidChecksum';
41
41
  }
@@ -0,0 +1 @@
1
+ export * as nic from './nic';
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './nic';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('lk/nic', () => {
5
+ it('format:199439848733', () => {
6
+ const result = format('199439848733');
7
+
8
+ expect(result).toEqual('199439848733');
9
+ });
10
+
11
+ it('validate:199439848733', () => {
12
+ const result = validate('199439848733');
13
+
14
+ expect(result.isValid && result.compact).toEqual('199439848733');
15
+ });
16
+
17
+ it('validate:942281632v', () => {
18
+ const result = validate('942281632v');
19
+
20
+ expect(result.isValid && result.compact).toEqual('942281632V');
21
+ });
22
+
23
+ it('validate:942R81632b', () => {
24
+ const result = validate('942281632b');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidFormat);
27
+ });
28
+
29
+ it('validate:942R81632b', () => {
30
+ const result = validate('942R81632b');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidFormat);
33
+ });
34
+
35
+ it('validate:23417', () => {
36
+ const result = validate('23417');
37
+ expect(result.error).toBeInstanceOf(InvalidLength);
38
+ });
39
+
40
+ });
package/src/lk/nic.ts ADDED
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The National Identity Card (abbreviation: NIC) is the identity document in use in Sri Lanka.
3
+ * It is compulsory for all Sri Lankan citizens who are fifteen years of age and older to have their NICs.
4
+ * NICs are issued by the Department for Registration of Persons.
5
+ * The Registration of Persons Act No.32 of 1968 as amended by Act Nos 28 and 37 of 1971 and Act No.11 of 1981 legislates the issuance and usage of NICs.
6
+ *
7
+ *
8
+ * source:
9
+ * https://en.wikipedia.org/wiki/National_identity_card_(Sri_Lanka)
10
+ */
11
+
12
+
13
+ import * as exceptions from '../exceptions';
14
+ import { strings } from '../util';
15
+ import { Validator, ValidateReturn } from '../types';
16
+
17
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
18
+ return strings.cleanUnicode(input, ' -');
19
+ }
20
+
21
+ const impl: Validator = {
22
+ name: 'Sri Lankan National Identity Card Number',
23
+ localName: 'NIC Number',
24
+ compact(input: string): string {
25
+ const [value, err] = clean(input);
26
+
27
+ if (err) {
28
+ throw err;
29
+ }
30
+
31
+ return value;
32
+ },
33
+
34
+ format(input: string): string {
35
+ const [value] = clean(input);
36
+ // NIC has better readability without any additional formattings
37
+ return value.toLowerCase();
38
+ },
39
+
40
+ validate(input: string): ValidateReturn {
41
+ const [value, error] = clean(input);
42
+
43
+ if (error) {
44
+ return { isValid: false, error };
45
+ }
46
+
47
+ if(value.length!==10 && value.length!==12 ){
48
+ return { isValid: false, error: new exceptions.InvalidLength() };
49
+ }
50
+
51
+ // Check if NIC matches the specified patterns (check for both old format & new format )
52
+ if (!/^[\d]{9}[vVxX]$|^[\d]{12}$/.test(value)) {
53
+ return { isValid: false, error: new exceptions.InvalidFormat('Invalid NIC format') };
54
+ }
55
+
56
+ return {
57
+ isValid: true,
58
+ compact: value,
59
+ isIndividual: true,
60
+ isCompany: false,
61
+ };
62
+ },
63
+ };
64
+
65
+ export const { name, localName, validate, format, compact } = impl;