stdnum 1.9.15 → 1.10.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/lib/cjs/at/vnr.js +2 -2
- package/lib/cjs/ba/jmbg.js +2 -2
- package/lib/cjs/cn/ric.js +2 -2
- package/lib/cjs/cu/ni.js +2 -2
- package/lib/cjs/cz/rc.js +2 -2
- package/lib/cjs/de/pwnr.js +2 -2
- package/lib/cjs/dk/cpr.js +7 -7
- package/lib/cjs/ee/ik.js +2 -2
- package/lib/cjs/fi/hetu.js +2 -3
- package/lib/cjs/gr/amka.js +2 -2
- package/lib/cjs/is/kennitala.js +2 -2
- package/lib/cjs/kr/rrn.js +2 -2
- package/lib/cjs/lv/pvn.js +2 -2
- package/lib/cjs/mx/curp.d.ts +1 -1
- package/lib/cjs/mx/curp.js +7 -11
- package/lib/cjs/mx/rfc.js +2 -2
- package/lib/cjs/my/nric.js +2 -2
- package/lib/cjs/no/fodselsnummer.js +4 -3
- package/lib/cjs/pl/pesel.js +2 -2
- package/lib/cjs/ro/cnp.js +2 -2
- package/lib/cjs/se/personnummer.js +34 -7
- package/lib/cjs/tw/tax_code.js +3 -3
- package/lib/cjs/util/index.d.ts +1 -1
- package/lib/cjs/util/index.js +4 -2
- package/lib/cjs/util/isValidDate.d.ts +6 -4
- package/lib/cjs/util/isValidDate.js +28 -12
- package/lib/cjs/za/idnr.js +2 -3
- package/lib/esm/at/vnr.js +2 -2
- package/lib/esm/ba/jmbg.js +3 -3
- package/lib/esm/cn/ric.js +2 -2
- package/lib/esm/cu/ni.js +3 -3
- package/lib/esm/cz/rc.js +3 -3
- package/lib/esm/de/pwnr.js +2 -2
- package/lib/esm/dk/cpr.js +8 -8
- package/lib/esm/ee/ik.js +2 -2
- package/lib/esm/fi/hetu.js +3 -4
- package/lib/esm/gr/amka.js +3 -3
- package/lib/esm/is/kennitala.js +3 -3
- package/lib/esm/kr/rrn.js +2 -2
- package/lib/esm/lv/pvn.js +3 -3
- package/lib/esm/mx/curp.d.ts +1 -1
- package/lib/esm/mx/curp.js +8 -12
- package/lib/esm/mx/rfc.js +2 -2
- package/lib/esm/my/nric.js +2 -2
- package/lib/esm/no/fodselsnummer.js +4 -3
- package/lib/esm/pl/pesel.js +2 -2
- package/lib/esm/ro/cnp.js +2 -2
- package/lib/esm/se/personnummer.js +35 -8
- package/lib/esm/tw/tax_code.js +3 -3
- package/lib/esm/util/index.d.ts +1 -1
- package/lib/esm/util/index.js +2 -2
- package/lib/esm/util/isValidDate.d.ts +6 -4
- package/lib/esm/util/isValidDate.js +25 -11
- package/lib/esm/za/idnr.js +3 -4
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as exceptions from '../exceptions';
|
|
2
|
-
import { isValidDateCompactYYYYMMDD, strings } from '../util';
|
|
2
|
+
import { isValidDateCompactYYYYMMDD, buildDate, strings } from '../util';
|
|
3
3
|
import { luhnChecksumValidate } from '../util/checksum';
|
|
4
|
+
const ONE_HUNDRED_YEARS_IN_MS = 100 * 365 * 24 * 60 * 60 * 1000;
|
|
4
5
|
function clean(input) {
|
|
5
6
|
const [value, err] = strings.cleanUnicode(input, ' :');
|
|
6
7
|
if (err) {
|
|
@@ -9,6 +10,35 @@ function clean(input) {
|
|
|
9
10
|
const [a, b, c] = strings.splitAt(value, -5, -4);
|
|
10
11
|
return [`${a.replace(/[-+]/g, '')}${b}${c}`, null];
|
|
11
12
|
}
|
|
13
|
+
function formatImpl(input) {
|
|
14
|
+
const [value] = clean(input);
|
|
15
|
+
let front, back, sep = '-';
|
|
16
|
+
if (value.length === 12 || value.length === 13) {
|
|
17
|
+
const [yyyy, mm, dd] = strings.splitAt(value, 0, 4, 6, 8);
|
|
18
|
+
const d = buildDate(yyyy, mm, dd);
|
|
19
|
+
if (d === null) {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
if (new Date().getTime() - d.getTime() > ONE_HUNDRED_YEARS_IN_MS) {
|
|
23
|
+
sep = '+';
|
|
24
|
+
}
|
|
25
|
+
front = `${yyyy.substring(2)}${mm}${dd}`;
|
|
26
|
+
back = value.substring(value.length - 4);
|
|
27
|
+
}
|
|
28
|
+
else if (value.length === 10) {
|
|
29
|
+
front = value.substring(0, 6);
|
|
30
|
+
back = value.substring(6);
|
|
31
|
+
}
|
|
32
|
+
else if (value.length === 11) {
|
|
33
|
+
front = value.substring(0, 6);
|
|
34
|
+
sep = value[6];
|
|
35
|
+
back = value.substring(7);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
return `${front}${sep}${back}`;
|
|
41
|
+
}
|
|
12
42
|
const impl = {
|
|
13
43
|
name: 'Swedish Personal Identity Number',
|
|
14
44
|
localName: 'Personnummer',
|
|
@@ -19,10 +49,7 @@ const impl = {
|
|
|
19
49
|
}
|
|
20
50
|
return value;
|
|
21
51
|
},
|
|
22
|
-
format
|
|
23
|
-
const [value] = clean(input);
|
|
24
|
-
return strings.splitAt(value, -4).join('-');
|
|
25
|
-
},
|
|
52
|
+
format: formatImpl,
|
|
26
53
|
validate(input) {
|
|
27
54
|
const [value, error] = clean(input);
|
|
28
55
|
if (error) {
|
|
@@ -61,7 +88,7 @@ const impl = {
|
|
|
61
88
|
}
|
|
62
89
|
yyyymmdd = `${century}${yymmdd}`;
|
|
63
90
|
}
|
|
64
|
-
if (!isValidDateCompactYYYYMMDD(yyyymmdd)) {
|
|
91
|
+
if (!isValidDateCompactYYYYMMDD(yyyymmdd, true)) {
|
|
65
92
|
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
66
93
|
}
|
|
67
94
|
if (!luhnChecksumValidate(digits)) {
|
|
@@ -69,11 +96,11 @@ const impl = {
|
|
|
69
96
|
}
|
|
70
97
|
return {
|
|
71
98
|
isValid: true,
|
|
72
|
-
compact:
|
|
99
|
+
compact: formatImpl(input),
|
|
73
100
|
isIndividual: true,
|
|
74
101
|
isCompany: false,
|
|
75
102
|
};
|
|
76
103
|
},
|
|
77
104
|
};
|
|
78
105
|
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29ubnVtbWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlL3BlcnNvbm51bW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSyxDQUFDO0FBRWpFLFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDMUIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV2RCxJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDckI7SUFFRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdCLElBQUksS0FBSyxFQUNQLElBQUksRUFDSixHQUFHLEdBQUcsR0FBRyxDQUFDO0lBRVosSUFB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
|
package/lib/esm/tw/tax_code.js
CHANGED
|
@@ -34,13 +34,13 @@ const impl = {
|
|
|
34
34
|
if (!strings.isdigits(yymmdd)) {
|
|
35
35
|
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
36
36
|
}
|
|
37
|
-
if (!isValidDateCompactYYMMDD(yymmdd)) {
|
|
37
|
+
if (!isValidDateCompactYYMMDD(yymmdd, true)) {
|
|
38
38
|
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
const [yyyymmdd, name] = strings.splitAt(value, 8);
|
|
43
|
-
if (!isValidDateCompactYYYYMMDD(yyyymmdd)) {
|
|
43
|
+
if (!isValidDateCompactYYYYMMDD(yyyymmdd, true)) {
|
|
44
44
|
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
45
45
|
}
|
|
46
46
|
if (!/^[A-Z]+$/i.test(name)) {
|
|
@@ -57,4 +57,4 @@ const impl = {
|
|
|
57
57
|
};
|
|
58
58
|
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
59
59
|
export default impl;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4X2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHcvdGF4X2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLE9BQU8sR0FDUixNQUFNLFNBQVMsQ0FBQztBQUVqQixTQUFTLEtBQUssQ0FBQyxLQUFhO0lBQzFCLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFHO0lBQ1gsWUFBWSxFQUFFLEVBQUU7SUFDaEIsU0FBUyxFQUFFLEVBQUU7SUFDYixJQUFJLEVBQUUsVUFBVTtJQUVoQixPQUFPLENBQUMsS0FBYTtRQUNuQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRTtZQUNQLE1BQU0sR0FBRyxDQUFDO1NBQ1g7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDbEM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7YUFDbEU7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7YUFDbEU7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO2FBQ3JFO1NBQ0Y7YUFBTTtZQUNMLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQzthQUNyRTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO2FBQ3JFO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FDdkUsSUFBSSxDQUFDO0FBQ1AsZUFBZSxJQUFJLENBQUMifQ==
|
package/lib/esm/util/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as strings from './strings';
|
|
2
2
|
export { weightedSum, mod97base10Validate } from './checksum';
|
|
3
|
-
export { isValidDate, isValidDateCompactYYYYMMDD, isValidDateCompactYYMMDD, isValidDateCompactDDMMYY, } from './isValidDate';
|
|
3
|
+
export { buildDate, validBirthdate, isValidDate, isValidDateCompactYYYYMMDD, isValidDateCompactYYMMDD, isValidDateCompactDDMMYY, } from './isValidDate';
|
|
4
4
|
export { strings };
|
package/lib/esm/util/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as strings from './strings';
|
|
2
2
|
export { weightedSum, mod97base10Validate } from './checksum';
|
|
3
|
-
export { isValidDate, isValidDateCompactYYYYMMDD, isValidDateCompactYYMMDD, isValidDateCompactDDMMYY, } from './isValidDate';
|
|
3
|
+
export { buildDate, validBirthdate, isValidDate, isValidDateCompactYYYYMMDD, isValidDateCompactYYMMDD, isValidDateCompactDDMMYY, } from './isValidDate';
|
|
4
4
|
export { strings };
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxFQUNkLFdBQVcsRUFDWCwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixHQUN6QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMifQ==
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export declare function
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
export declare function validBirthdate(date: Date | null): boolean;
|
|
2
|
+
export declare function buildDate(yy: string, mm: string, dd: string): Date | null;
|
|
3
|
+
export declare function isValidDate(yy: string, mm: string, dd: string, isBefore?: boolean): boolean;
|
|
4
|
+
export declare function isValidDateCompactYYMMDD(yymmdd: string, isBefore?: boolean): boolean;
|
|
5
|
+
export declare function isValidDateCompactDDMMYY(ddmmyy: string, isBefore?: boolean): boolean;
|
|
6
|
+
export declare function isValidDateCompactYYYYMMDD(yyyymmdd: string, isBefore?: boolean): boolean;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { splitAt } from './strings';
|
|
2
|
-
export function
|
|
2
|
+
export function validBirthdate(date) {
|
|
3
|
+
if (date === null) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const now = new Date();
|
|
7
|
+
return date.getTime() <= now.getTime();
|
|
8
|
+
}
|
|
9
|
+
export function buildDate(yy, mm, dd) {
|
|
3
10
|
const yyN = parseInt(yy, 10);
|
|
4
11
|
const mmN = parseInt(mm, 10) - 1;
|
|
5
12
|
const ddN = parseInt(dd, 10);
|
|
6
13
|
if (Number.isNaN(yyN) || Number.isNaN(mmN) || Number.isNaN(ddN)) {
|
|
7
|
-
return
|
|
14
|
+
return null;
|
|
8
15
|
}
|
|
9
16
|
let d;
|
|
10
17
|
if (yyN < 20) {
|
|
@@ -17,23 +24,30 @@ export function isValidDate(yy, mm, dd) {
|
|
|
17
24
|
d = new Date(yyN, mmN, ddN);
|
|
18
25
|
}
|
|
19
26
|
if (Number.isNaN(d.getFullYear())) {
|
|
20
|
-
return
|
|
27
|
+
return null;
|
|
21
28
|
}
|
|
22
29
|
if (d.getDate() !== ddN || d.getMonth() !== mmN) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return d;
|
|
33
|
+
}
|
|
34
|
+
export function isValidDate(yy, mm, dd, isBefore = false) {
|
|
35
|
+
const d = buildDate(yy, mm, dd);
|
|
36
|
+
if (d === null) {
|
|
23
37
|
return false;
|
|
24
38
|
}
|
|
25
|
-
return true;
|
|
39
|
+
return isBefore ? validBirthdate(d) : true;
|
|
26
40
|
}
|
|
27
|
-
export function isValidDateCompactYYMMDD(yymmdd) {
|
|
41
|
+
export function isValidDateCompactYYMMDD(yymmdd, isBefore = false) {
|
|
28
42
|
const [year, mon, day] = splitAt(yymmdd, 2, 4);
|
|
29
|
-
return isValidDate(year, mon, day);
|
|
43
|
+
return isValidDate(year, mon, day, isBefore);
|
|
30
44
|
}
|
|
31
|
-
export function isValidDateCompactDDMMYY(ddmmyy) {
|
|
45
|
+
export function isValidDateCompactDDMMYY(ddmmyy, isBefore = false) {
|
|
32
46
|
const [day, mon, year] = splitAt(ddmmyy, 2, 4);
|
|
33
|
-
return isValidDate(year, mon, day);
|
|
47
|
+
return isValidDate(year, mon, day, isBefore);
|
|
34
48
|
}
|
|
35
|
-
export function isValidDateCompactYYYYMMDD(yyyymmdd) {
|
|
49
|
+
export function isValidDateCompactYYYYMMDD(yyyymmdd, isBefore = false) {
|
|
36
50
|
const [year, mon, day] = splitAt(yyyymmdd, 4, 6);
|
|
37
|
-
return isValidDate(year, mon, day);
|
|
51
|
+
return isValidDate(year, mon, day, isBefore);
|
|
38
52
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNWYWxpZERhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9pc1ZhbGlkRGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBaUI7SUFDOUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7SUFDMUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDL0QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksQ0FBQyxDQUFDO0lBQ04sSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO1FBQ1osQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BDO1NBQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNwQztTQUFNO1FBQ0wsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7UUFDakMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUdELElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFNRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixFQUFVLEVBQ1YsRUFBVSxFQUNWLEVBQVUsRUFDVixRQUFRLEdBQUcsS0FBSztJQUVoQixNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVoQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFHRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE1BQWMsRUFDZCxRQUFRLEdBQUcsS0FBSztJQUVoQixNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUvQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxNQUFjLEVBQ2QsUUFBUSxHQUFHLEtBQUs7SUFFaEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0MsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsUUFBZ0IsRUFDaEIsUUFBUSxHQUFHLEtBQUs7SUFFaEIsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakQsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDL0MsQ0FBQyJ9
|
package/lib/esm/za/idnr.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as exceptions from '../exceptions';
|
|
2
|
-
import { strings } from '../util';
|
|
3
|
-
import { isValidDateCompactYYMMDD } from '../util/isValidDate';
|
|
2
|
+
import { strings, isValidDateCompactYYMMDD } from '../util';
|
|
4
3
|
import { luhnChecksumValidate } from '../util/checksum';
|
|
5
4
|
function clean(input) {
|
|
6
5
|
return strings.cleanUnicode(input, ' ');
|
|
@@ -38,7 +37,7 @@ const impl = {
|
|
|
38
37
|
if (!strings.isdigits(gender)) {
|
|
39
38
|
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
40
39
|
}
|
|
41
|
-
if (!isValidDateCompactYYMMDD(bdate)) {
|
|
40
|
+
if (!isValidDateCompactYYMMDD(bdate, true)) {
|
|
42
41
|
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
43
42
|
}
|
|
44
43
|
if (!luhnChecksumValidate(value)) {
|
|
@@ -53,4 +52,4 @@ const impl = {
|
|
|
53
52
|
},
|
|
54
53
|
};
|
|
55
54
|
export const { name, localName, abbreviation, validate, format, compact } = impl;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRuci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy96YS9pZG5yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLElBQUksR0FBYztJQUN0QixJQUFJLEVBQUUsd0NBQXdDO0lBQzlDLFNBQVMsRUFBRSwwQkFBMEI7SUFDckMsWUFBWSxFQUFFLE1BQU07SUFDcEIsT0FBTyxDQUFDLEtBQWE7UUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLEdBQUcsQ0FBQztTQUNYO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLEtBQUssRUFBRTtZQUNULE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtZQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztTQUNsRTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1NBQ2xFO1FBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQUFBRCxFQUFHLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7U0FDckU7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1NBQ3JFO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1NBQ3JFO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1NBQ3BFO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQ3ZFLElBQUksQ0FBQyJ9
|