extractMrzLines method
Implementation
List<String> extractMrzLines(String fullText) {
print("extract");
final lines = fullText
.split('\n')
.map((line) => line.trim())
.where((line) => line.isNotEmpty)
.toList();
List<String> mrzLines = [];
for (String line in lines) {
final cleanedLine = line.cleanMrzText();
// MRZ Line 1: Must start with P< for passport
bool isMrzLine1 = cleanedLine.startsWith('P<') ||
cleanedLine.startsWith('P«') ||
cleanedLine.startsWith('P‹') ||
cleanedLine.startsWith('P〈') ||
cleanedLine.startsWith('P<');
// MRZ Line 2: Must have at least 3 consecutive < characters or variants
bool isMrzLine2 = RegExp(r'[<«»‹›〈〉<>]{3,}').hasMatch(cleanedLine) &&
cleanedLine.length >= 40 &&
!cleanedLine.startsWith('P') &&
RegExp(r'[A-Z0-9]{6,}').hasMatch(cleanedLine);
if (isMrzLine1 || (isMrzLine2 && cleanedLine.length >= 36)) {
print("line : ${line}");
print("cleanedLine : ${cleanedLine}");
print("isMrzLine1: $isMrzLine1, isMrzLine2: $isMrzLine2");
mrzLines.add(cleanedLine.normalizeMrzLine());
}
}
if (mrzLines.length >= 2) {
print("mrzline > 2 : ${mrzLines.toString()}");
return mrzLines.take(2).toList();
}
return mrzLines;
}