-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathfrenchNationalId.test.ts
112 lines (97 loc) · 2.95 KB
/
frenchNationalId.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import parse from '../parse';
describe('parse French National Id', () => {
it('valid MRZ', () => {
const MRZ = [
'IDFRATEST<NAME<<<<<<<<<<<<<<<<0CHE02',
'1710GVA123451ROBERTA<<<<<<<9112311F2',
];
const result = parse(MRZ);
expect(result).toMatchObject({
format: 'FRENCH_NATIONAL_ID',
valid: true,
documentNumber: '1710GVA12345',
});
expect(result.fields).toStrictEqual({
documentCode: 'ID',
issuingState: 'FRA',
lastName: 'TEST NAME',
administrativeCode: '0CHE02',
issueDate: '1710',
administrativeCode2: 'GVA',
documentNumber: '12345',
documentNumberCheckDigit: '1',
firstName: 'ROBERTA',
birthDate: '911231',
birthDateCheckDigit: '1',
sex: 'female',
compositeCheckDigit: '2',
});
expect(result.details.filter((a) => !a.valid)).toHaveLength(0);
});
it('invalid MRZ', () => {
const MRZ = [
'IDFRATEST<NAME<<<<<<<<<<<<<<<<0CHE02',
'1710GV?123451ROBERTA<<<<<<<9112311F2',
];
const result = parse(MRZ);
expect(result).toMatchObject({
format: 'FRENCH_NATIONAL_ID',
valid: false,
documentNumber: null,
});
expect(result.fields).toStrictEqual({
documentCode: 'ID',
issuingState: 'FRA',
lastName: 'TEST NAME',
administrativeCode: '0CHE02',
issueDate: '1710',
administrativeCode2: null,
documentNumber: '12345',
documentNumberCheckDigit: null,
firstName: 'ROBERTA',
birthDate: '911231',
birthDateCheckDigit: '1',
sex: 'female',
compositeCheckDigit: null,
});
expect(result.details.filter((a) => !a.valid)).toHaveLength(3);
});
it('Use autocorrect', () => {
const MRZ = [
'IDFRATEST<NAME<<<<<<<<<<<<<<<<0CHE02',
'1710GVA123451ROBERTA<<<<<<<9112311F2',
];
const reference = parse(MRZ);
const falseMRZ = [
'1DFRATE5T<NAME<<<<<<<<<<<<<<<<0CHE02',
'I7I0GVA123451RO8ERTA<<<<<<<9IIZ3IIF2',
];
const correctedResult = parse(falseMRZ, { autocorrect: true });
expect(correctedResult.fields).toStrictEqual(reference.fields);
expect(
correctedResult.details.map(({ autocorrect }) => autocorrect),
).toStrictEqual([
[{ line: 0, column: 0, original: '1', corrected: 'I' }],
[],
[{ line: 0, column: 7, original: '5', corrected: 'S' }],
[],
[
{ line: 1, column: 0, original: 'I', corrected: '1' },
{ line: 1, column: 2, original: 'I', corrected: '1' },
],
[],
[],
[],
[{ line: 1, column: 15, original: '8', corrected: 'B' }],
[
{ line: 1, column: 28, original: 'I', corrected: '1' },
{ line: 1, column: 29, original: 'I', corrected: '1' },
{ line: 1, column: 30, original: 'Z', corrected: '2' },
{ line: 1, column: 32, original: 'I', corrected: '1' },
],
[{ line: 1, column: 33, original: 'I', corrected: '1' }],
[],
[],
]);
});
});