Skip to content

Commit 0376030

Browse files
Merge pull request #11 from sivakumar-mahalingam/dev
added status_message
2 parents 2b10467 + c54a605 commit 0376030

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ Now, based on the example of a national passport, let us take a closer look at t
137137
- [ ] Support pdf as input
138138
- [x] Function to return mrz text as output
139139
- [ ] Bulk process
140-
- [ ] Add function parameter - Image Enhancement
141140
- [ ] Add function parameter - Image Enhancement Model
141+
- [ ] Add function parameter - Text Image Enhancement Model
142142
- [ ] Train Tesseract model with additional data
143143
- [x] Add function parameter - include_checkdigit
144144
- [ ] Add function - get_mrz_image

fastmrz/fastmrz.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
171171

172172
mrz_code_dict["issuer_code"] = mrz_lines[0][2:5]
173173
if not mrz_code_dict["issuer_code"].isalpha():
174-
return {"status": "FAILURE", "message": "Invalid MRZ format"}
174+
mrz_code_dict["status"] = "FAILURE"
175+
mrz_code_dict["status_message"] = "Invalid MRZ format"
175176

176177
names = mrz_lines[0][5:].split("<<")
177178
mrz_code_dict["surname"] = names[0].replace("<", " ")
@@ -181,18 +182,21 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
181182
mrz_code_dict["document_number"] = mrz_lines[1][:9].replace("<", "")
182183
document_number_checkdigit = self._get_checkdigit(mrz_code_dict["document_number"])
183184
if document_number_checkdigit != mrz_lines[1][9]:
184-
return {"status": "FAILURE", "message": "Document number checksum is not matching"}
185+
mrz_code_dict["status"] = "FAILURE"
186+
mrz_code_dict["status_message"] = "Document number checksum is not matching"
185187
if include_checkdigit:
186188
mrz_code_dict["document_number_checkdigit"] = document_number_checkdigit
187189

188190
mrz_code_dict["nationality_code"] = mrz_lines[1][10:13]
189191
if not mrz_code_dict["nationality_code"].isalpha():
190-
return {"status": "FAILURE", "message": "Invalid MRZ format"}
192+
mrz_code_dict["status"] = "FAILURE"
193+
mrz_code_dict["status_message"] = "Invalid MRZ format"
191194

192195
mrz_code_dict["birth_date"] = mrz_lines[1][13:19]
193196
birth_date_checkdigit = self._get_checkdigit(mrz_code_dict["birth_date"])
194197
if birth_date_checkdigit != mrz_lines[1][19]:
195-
return {"status": "FAILURE", "message": "Date of birth checksum is not matching"}
198+
mrz_code_dict["status"] = "FAILURE"
199+
mrz_code_dict["status_message"] = "Date of birth checksum is not matching"
196200
if include_checkdigit:
197201
mrz_code_dict["birth_date_checkdigit"] = birth_date_checkdigit
198202
mrz_code_dict["birth_date"] = self._format_date(mrz_code_dict["birth_date"])
@@ -202,7 +206,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
202206
mrz_code_dict["expiry_date"] = mrz_lines[1][21:27]
203207
expiry_date_checkdigit = self._get_checkdigit(mrz_code_dict["expiry_date"])
204208
if expiry_date_checkdigit != mrz_lines[1][27]:
205-
return {"status": "FAILURE", "message": "Date of expiry checksum is not matching"}
209+
mrz_code_dict["status"] = "FAILURE"
210+
mrz_code_dict["status_message"] = "Date of expiry checksum is not matching"
206211
if include_checkdigit:
207212
mrz_code_dict["expiry_date_checkdigit"] = expiry_date_checkdigit
208213
mrz_code_dict["expiry_date"] = self._format_date(mrz_code_dict["expiry_date"])
@@ -214,7 +219,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
214219
mrz_code_dict["optional_data"] = mrz_lines[1][28:42].strip("<")
215220
optional_data_checkdigit = self._get_checkdigit(mrz_code_dict["optional_data"].strip("<"))
216221
if optional_data_checkdigit != mrz_lines[1][42]:
217-
return {"status": "FAILURE", "message": "Optional data checksum is not matching"}
222+
mrz_code_dict["status"] = "FAILURE"
223+
mrz_code_dict["status_message"] = "Optional data checksum is not matching"
218224
if include_checkdigit:
219225
mrz_code_dict["optional_data_checkdigit"] = optional_data_checkdigit
220226
elif mrz_code_dict["mrz_type"] == "MRVA":
@@ -225,7 +231,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
225231
final_checkdigit = self._get_final_checkdigit(mrz_lines, mrz_code_dict["mrz_type"])
226232
if (mrz_lines[1][-1] != final_checkdigit
227233
and mrz_code_dict["mrz_type"] not in ("MRVA", "MRVB")):
228-
return {"status": "FAILURE", "message": "Final checksum is not matching"}
234+
mrz_code_dict["status"] = "FAILURE"
235+
mrz_code_dict["status_message"] = "Final checksum is not matching"
229236
if include_checkdigit:
230237
mrz_code_dict["final_checkdigit"] = final_checkdigit
231238
else:
@@ -236,12 +243,14 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
236243

237244
mrz_code_dict["issuer_code"] = mrz_lines[0][2:5]
238245
if not mrz_code_dict["issuer_code"].isalpha():
239-
return {"status": "FAILURE", "message": "Invalid MRZ format"}
246+
mrz_code_dict["status"] = "FAILURE"
247+
mrz_code_dict["status_message"] = "Invalid MRZ format"
240248

241249
mrz_code_dict["document_number"] = mrz_lines[0][5:14]
242250
document_number_checkdigit = self._get_checkdigit(mrz_code_dict["document_number"])
243251
if document_number_checkdigit != mrz_lines[0][14]:
244-
return {"status": "FAILURE", "message": "Document number checksum is not matching"}
252+
mrz_code_dict["status"] = "FAILURE"
253+
mrz_code_dict["status_message"] = "Document number checksum is not matching"
245254
if include_checkdigit:
246255
mrz_code_dict["document_number_checkdigit"] = document_number_checkdigit
247256

@@ -251,7 +260,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
251260
mrz_code_dict["birth_date"] = mrz_lines[1][:6]
252261
birth_date_checkdigit = self._get_checkdigit(mrz_code_dict["birth_date"])
253262
if birth_date_checkdigit != mrz_lines[1][6]:
254-
return {"status": "FAILURE", "message": "Date of birth checksum is not matching"}
263+
mrz_code_dict["status"] = "FAILURE"
264+
mrz_code_dict["status_message"] = "Date of birth checksum is not matching"
255265
if include_checkdigit:
256266
mrz_code_dict["birth_date_checkdigit"] = birth_date_checkdigit
257267
mrz_code_dict["birth_date"] = self._format_date(mrz_code_dict["birth_date"])
@@ -261,7 +271,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
261271
mrz_code_dict["expiry_date"] = mrz_lines[1][8:14]
262272
expiry_date_checkdigit = self._get_checkdigit(mrz_code_dict["expiry_date"])
263273
if expiry_date_checkdigit != mrz_lines[1][14]:
264-
return {"status": "FAILURE", "message": "Date of expiry checksum is not matching"}
274+
mrz_code_dict["status"] = "FAILURE"
275+
mrz_code_dict["status_message"] = "Date of expiry checksum is not matching"
265276
if include_checkdigit:
266277
mrz_code_dict["expiry_date_checkdigit"] = expiry_date_checkdigit
267278
mrz_code_dict["expiry_date"] = self._format_date(mrz_code_dict["expiry_date"])
@@ -270,12 +281,14 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
270281

271282
mrz_code_dict["nationality_code"] = mrz_lines[1][15:18]
272283
if not mrz_code_dict["nationality_code"].isalpha():
273-
return {"status": "FAILURE", "message": "Invalid MRZ format"}
284+
mrz_code_dict["status"] = "FAILURE"
285+
mrz_code_dict["status_message"] = "Invalid MRZ format"
274286

275287
mrz_code_dict["optional_data_2"] = mrz_lines[0][18:29].strip("<")
276288
final_checkdigit = self._get_final_checkdigit(mrz_lines, mrz_code_dict["mrz_type"])
277289
if mrz_lines[1][-1] != final_checkdigit:
278-
return {"status": "FAILURE", "message": "Final checksum is not matching"}
290+
mrz_code_dict["status"] = "FAILURE"
291+
mrz_code_dict["status_message"] = "Final checksum is not matching"
279292
if include_checkdigit:
280293
mrz_code_dict["final_checkdigit"] = final_checkdigit
281294

@@ -287,7 +300,8 @@ def _parse_mrz(self, mrz_text, include_checkdigit=True):
287300
mrz_code_dict["mrz_text"] = mrz_text
288301

289302
# Final status
290-
mrz_code_dict["status"] = "SUCCESS"
303+
if mrz_code_dict.get("status") != "FAILURE":
304+
mrz_code_dict["status"] = "SUCCESS"
291305

292306
return mrz_code_dict
293307

0 commit comments

Comments
 (0)