File size: 3,299 Bytes
cd964f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
class FallbackMRZ:
    """

    A simple wrapper to mimic PassportEye's MRZ object when we manually extract lines.

    Assumes TD3 (standard passport) format for simplicity, or tries to be generic.

    """
    def __init__(self, line1, line2):
        self.line1 = line1
        self.line2 = line2
        self.valid = True
        
        # Initialize fields as empty/None
        self.type = ""
        self.country = "" # Issuing country
        self.surname = ""
        self.names = ""
        self.number = ""
        self.nationality = ""
        self.date_of_birth = ""
        self.sex = ""
        self.expiration_date = ""
        self.personal_number = ""
        
        self._parse()

    def _parse(self):
        try:
            # Basic TD3 parsing (2 lines, 44 chars)
            # Line 1: P<CCCSURNAME<<NAMES<<<<<<<<<<<<<<<<<<<<<<
            # Removed debug prints for faster processing
            
            # Parse line 1 for name information
            if len(self.line1) >= 5:  # Minimum length for basic info
                self.type = self.line1[0:2].replace('<', '')
                self.country = self.line1[2:5].replace('<', '')
                
                if len(self.line1) > 5:
                    full_name = self.line1[5:].strip('<')
                    # Removed debug print
                    
                    # Split by << and clean each part
                    if '<<' in full_name:
                        parts = full_name.split('<<', 1)
                        self.surname = parts[0].strip('<').strip()
                        # Clean the names part - convert < to spaces for proper name separation
                        names_part = parts[1].strip('<').strip() if len(parts) > 1 else ""
                        # Convert remaining < characters to spaces for proper name separation
                        self.names = names_part.replace('<', ' ').strip()
                        # Removed debug print
                    else:
                        self.surname = full_name.strip('<').strip()
                        self.names = ""
                        # Removed debug print
            
            # Parse line 2 for other information (be more flexible with length)
            if len(self.line2) >= 20:  # Minimum for basic info
                self.number = self.line2[0:9].replace('<', '') if len(self.line2) >= 9 else ""
                
                if len(self.line2) >= 13:
                    self.nationality = self.line2[10:13].replace('<', '')
                
                if len(self.line2) >= 19:
                    self.date_of_birth = self.line2[13:19]
                
                if len(self.line2) >= 21:
                    self.sex = self.line2[20]
                
                if len(self.line2) >= 27:
                    self.expiration_date = self.line2[21:27]
                
                if len(self.line2) >= 42:
                    self.personal_number = self.line2[28:42].replace('<', '')
                
                # Removed debug prints for faster processing
                pass
        except Exception as e:
            # Removed debug print - silently handle parsing errors
            pass