asma-helpers 0.37.15 → 0.37.17
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/helpers/validateNorwegianPersonalNumber.d.ts +15 -0
- package/lib/helpers/validateNorwegianPersonalNumber.d.ts.map +1 -1
- package/lib/helpers/validateNorwegianPersonalNumber.js +31 -4
- package/lib/helpers/validateNorwegianPersonalNumber.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/validateNorwegianPersonalNumber.ts +41 -5
|
@@ -16,6 +16,21 @@ export declare const validateNorwegianPersonalNumber: (number: string) => NORWEG
|
|
|
16
16
|
*/
|
|
17
17
|
export declare const getBirthDateFromNorwegianPersonalNumber: (number: string) => string | null;
|
|
18
18
|
export declare const getAgeFromNorwegianPersonalNumber: (pnr: string) => number | null;
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param pnr string
|
|
22
|
+
* @returns pnr if validation passed, or null if validation failed
|
|
23
|
+
*/
|
|
24
|
+
export declare function getValidNorwegianPersonalNumber(pnr: string): string | null;
|
|
25
|
+
export type GENDER = 'MALE' | 'FEMALE';
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param pnr string - Norwegian personal number
|
|
29
|
+
* @returns `GENDER` if successfully determined, otherwise `null`
|
|
30
|
+
*/
|
|
31
|
+
export declare const getGenderFromNorwegianPersonalNumber: (pnr: string) => GENDER | null;
|
|
32
|
+
export declare const isMale: (pnr: string) => boolean;
|
|
33
|
+
export declare const isFemale: (pnr: string) => boolean;
|
|
19
34
|
export declare function generateUniqueToken(user: {
|
|
20
35
|
fnr: string;
|
|
21
36
|
salt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateNorwegianPersonalNumber.d.ts","sourceRoot":"","sources":["../../src/helpers/validateNorwegianPersonalNumber.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,wDAAyD,CAAA;AAE/F,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;AACpG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AACD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AACD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AACD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AACD,wBAAgB,8CAA8C,CAAC,MAAM,EAAE,MAAM,GAAG;IAC5E,KAAK,EAAE,+BAA+B,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,CA4FA;AAED,eAAO,MAAM,+BAA+B,WAAY,MAAM,oCACE,CAAA;AAEhE;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,WAAY,MAAM,kBACM,CAAA;AAE5E,eAAO,MAAM,iCAAiC,QAAS,MAAM,kBA6B5D,CAAA;
|
|
1
|
+
{"version":3,"file":"validateNorwegianPersonalNumber.d.ts","sourceRoot":"","sources":["../../src/helpers/validateNorwegianPersonalNumber.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,wDAAyD,CAAA;AAE/F,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;AACpG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AACD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AACD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AACD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AACD,wBAAgB,8CAA8C,CAAC,MAAM,EAAE,MAAM,GAAG;IAC5E,KAAK,EAAE,+BAA+B,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,CA4FA;AAED,eAAO,MAAM,+BAA+B,WAAY,MAAM,oCACE,CAAA;AAEhE;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,WAAY,MAAM,kBACM,CAAA;AAE5E,eAAO,MAAM,iCAAiC,QAAS,MAAM,kBA6B5D,CAAA;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1E;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AACtC;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,QAAS,MAAM,KAAG,MAAM,GAAG,IAS3E,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,OAA+D,CAAA;AAEpG,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,OAAiE,CAAA;AA2CxG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQrH"}
|
|
@@ -51,10 +51,7 @@ export function validateNorwegianPersonalNumberAndGetBirthDate(number) {
|
|
|
51
51
|
else {
|
|
52
52
|
month = digits[2] * 10 + digits[3];
|
|
53
53
|
}
|
|
54
|
-
if (
|
|
55
|
-
return { class: 'INVALID' };
|
|
56
|
-
}
|
|
57
|
-
if (isTemporary) {
|
|
54
|
+
if (isTemporary && isValidDate(year, month, day)) {
|
|
58
55
|
return { class: 'TEMPORARY', birthDate };
|
|
59
56
|
}
|
|
60
57
|
// Validate control digits (modulus 11)
|
|
@@ -75,6 +72,9 @@ export function validateNorwegianPersonalNumberAndGetBirthDate(number) {
|
|
|
75
72
|
// Update birth date to reflect adjusted day
|
|
76
73
|
return { class: 'DNUMBER', birthDate: `${formatWithLeadingZero(day)}.${formattedMonth}.${fullYear}` };
|
|
77
74
|
}
|
|
75
|
+
if (!isValidDate(year, month, day)) {
|
|
76
|
+
return { class: 'INVALID' };
|
|
77
|
+
}
|
|
78
78
|
return { class: 'REAL', birthDate };
|
|
79
79
|
}
|
|
80
80
|
export const validateNorwegianPersonalNumber = (number) => validateNorwegianPersonalNumberAndGetBirthDate(number).class;
|
|
@@ -105,6 +105,33 @@ export const getAgeFromNorwegianPersonalNumber = (pnr) => {
|
|
|
105
105
|
}
|
|
106
106
|
return age;
|
|
107
107
|
};
|
|
108
|
+
/**
|
|
109
|
+
*
|
|
110
|
+
* @param pnr string
|
|
111
|
+
* @returns pnr if validation passed, or null if validation failed
|
|
112
|
+
*/
|
|
113
|
+
export function getValidNorwegianPersonalNumber(pnr) {
|
|
114
|
+
const validationResult = validateNorwegianPersonalNumber(pnr);
|
|
115
|
+
if (validationResult === 'INVALID') {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return pnr;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
*
|
|
122
|
+
* @param pnr string - Norwegian personal number
|
|
123
|
+
* @returns `GENDER` if successfully determined, otherwise `null`
|
|
124
|
+
*/
|
|
125
|
+
export const getGenderFromNorwegianPersonalNumber = (pnr) => {
|
|
126
|
+
const norwegianId = getValidNorwegianPersonalNumber(pnr);
|
|
127
|
+
if (!norwegianId)
|
|
128
|
+
return null;
|
|
129
|
+
const individualNumber = parseInt(norwegianId.slice(6, 9), 10);
|
|
130
|
+
/* Digits 7-9 determine gender: even = `FEMALE`, odd = `MALE` */
|
|
131
|
+
return individualNumber % 2 === 0 ? 'FEMALE' : 'MALE';
|
|
132
|
+
};
|
|
133
|
+
export const isMale = (pnr) => getGenderFromNorwegianPersonalNumber(pnr) === 'MALE';
|
|
134
|
+
export const isFemale = (pnr) => getGenderFromNorwegianPersonalNumber(pnr) === 'FEMALE';
|
|
108
135
|
// Function to check for valid date
|
|
109
136
|
function isValidDate(year, month, day) {
|
|
110
137
|
if (month < 1 || month > 12 || day < 1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateNorwegianPersonalNumber.js","sourceRoot":"","sources":["../../src/helpers/validateNorwegianPersonalNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAU,CAAA;AAG/F,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACrD,OAAO,+BAA+B,CAAC,MAAM,CAAC,KAAK,WAAW,CAAA;AAClE,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC7C,OAAO,+BAA+B,CAAC,MAAM,CAAC,KAAK,SAAS,CAAA;AAChE,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACrD,OAAO,+BAA+B,CAAC,MAAM,CAAC,KAAK,WAAW,CAAA;AAClE,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAChD,OAAO,+BAA+B,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;AAC7D,CAAC;AACD,MAAM,UAAU,8CAA8C,CAAC,MAAc;IAIzE,yDAAyD;IACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAEzD;;;OAGG;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAYzC,CAAA;IAED,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAElD,sDAAsD;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAElC,4DAA4D;IAC5D,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAEhE,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAEvC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAC,2CAA2C;IAE7G,yCAAyC;IACzC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAClF,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAA;IAEjE,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,+BAA+B,CAAC,cAAc,CAAC,CAAA;QAEnE,6CAA6C;QAC7C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC/B,CAAC;QAED,yGAAyG;QACzG,KAAK,IAAI,WAAW,CAAA;QACpB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,YAAY,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,EAAE,CAAA;IAC3G,CAAC;SAAM,CAAC;QACJ,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,
|
|
1
|
+
{"version":3,"file":"validateNorwegianPersonalNumber.js","sourceRoot":"","sources":["../../src/helpers/validateNorwegianPersonalNumber.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -79,11 +79,7 @@ export function validateNorwegianPersonalNumberAndGetBirthDate(number: string):
|
|
|
79
79
|
month = digits[2] * 10 + digits[3]
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
if (
|
|
83
|
-
return { class: 'INVALID' }
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (isTemporary) {
|
|
82
|
+
if (isTemporary && isValidDate(year, month, day)) {
|
|
87
83
|
return { class: 'TEMPORARY', birthDate }
|
|
88
84
|
}
|
|
89
85
|
|
|
@@ -109,6 +105,10 @@ export function validateNorwegianPersonalNumberAndGetBirthDate(number: string):
|
|
|
109
105
|
return { class: 'DNUMBER', birthDate: `${formatWithLeadingZero(day)}.${formattedMonth}.${fullYear}` }
|
|
110
106
|
}
|
|
111
107
|
|
|
108
|
+
if (!isValidDate(year, month, day)) {
|
|
109
|
+
return { class: 'INVALID' }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
112
|
return { class: 'REAL', birthDate }
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -154,6 +154,42 @@ export const getAgeFromNorwegianPersonalNumber = (pnr: string) => {
|
|
|
154
154
|
return age
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
/**
|
|
158
|
+
*
|
|
159
|
+
* @param pnr string
|
|
160
|
+
* @returns pnr if validation passed, or null if validation failed
|
|
161
|
+
*/
|
|
162
|
+
export function getValidNorwegianPersonalNumber(pnr: string): string | null {
|
|
163
|
+
const validationResult = validateNorwegianPersonalNumber(pnr)
|
|
164
|
+
|
|
165
|
+
if (validationResult === 'INVALID') {
|
|
166
|
+
return null
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return pnr
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export type GENDER = 'MALE' | 'FEMALE'
|
|
173
|
+
/**
|
|
174
|
+
*
|
|
175
|
+
* @param pnr string - Norwegian personal number
|
|
176
|
+
* @returns `GENDER` if successfully determined, otherwise `null`
|
|
177
|
+
*/
|
|
178
|
+
export const getGenderFromNorwegianPersonalNumber = (pnr: string): GENDER | null => {
|
|
179
|
+
const norwegianId = getValidNorwegianPersonalNumber(pnr)
|
|
180
|
+
|
|
181
|
+
if (!norwegianId) return null
|
|
182
|
+
|
|
183
|
+
const individualNumber = parseInt(norwegianId.slice(6, 9), 10)
|
|
184
|
+
|
|
185
|
+
/* Digits 7-9 determine gender: even = `FEMALE`, odd = `MALE` */
|
|
186
|
+
return individualNumber % 2 === 0 ? 'FEMALE' : 'MALE'
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export const isMale = (pnr: string): boolean => getGenderFromNorwegianPersonalNumber(pnr) === 'MALE'
|
|
190
|
+
|
|
191
|
+
export const isFemale = (pnr: string): boolean => getGenderFromNorwegianPersonalNumber(pnr) === 'FEMALE'
|
|
192
|
+
|
|
157
193
|
// Function to check for valid date
|
|
158
194
|
function isValidDate(year: number, month: number, day: number): boolean {
|
|
159
195
|
if (month < 1 || month > 12 || day < 1) return false
|