validateNames method
(bool, String, MrzName)
validateNames(
- Iterable<
String> lines, - OcrMrzSetting setting,
- List<
NameValidationData> names
Implementation
(bool, String, MrzName) validateNames(Iterable<String> lines, OcrMrzSetting setting, List<NameValidationData> names) {
if (setting.nameValidationMode == NameValidationMode.none) {
return (true, 'none', this);
} else if (setting.nameValidationMode == NameValidationMode.exact) {
if (names.isNotEmpty) {
final nameValidation = names.firstWhereOrNull((a) => noKcomparison(a, firstname: firstName, lastname: lastName));
if (nameValidation != null) {
MrzName fixed = nameValidation.toMrzName();
return (true, 'exact provided_list', fixed);
} else {
final similarName = findMostSimilarByNameData(names, firstname: firstName, lastname: lastName);
if (similarName != null) {
MrzName fixed = similarName.toMrzName();
return (true, 'similar provided_list', fixed);
}
}
}
List<String> words = [];
for (var l in lines) {
words.addAll(extractWords(l).map((a) => a.toLowerCase()));
}
final isFirstNameValid = firstName.trim().isEmpty || firstName.toLowerCase().split(" ").every((a) => words.contains(a.toLowerCase()));
final isLastNameValid = lastName.trim().isEmpty || lastName.toLowerCase().split(" ").every((a) => words.contains(a.toLowerCase()));
final res = isLastNameValid && isFirstNameValid;
if (res) {
return (true, 'ocr_lines', this);
}
// final nameValidation = name.any((a)=>"${a.firstName} ${a.lastName} ${a.middleName??''}".toUpperCase().split(" ").contains(firstName.toUpperCase()) || "${a.firstName} ${a.lastName} ${a.middleName??''}".toUpperCase().split(" ").contains(lastName.toUpperCase()));
return (false, 'failed', this);
} else {
List<String> words = [];
for (var l in lines) {
words.addAll(extractWords(l).map((a) => a.toLowerCase()));
}
final isFirstNameValid = firstName.trim().isEmpty || firstName.toLowerCase().split(" ").every((a) => words.any((b) => b.contains(a.toLowerCase())));
final isLastNameValid = lastName.trim().isEmpty || lastName.toLowerCase().split(" ").every((a) => words.any((b) => b.contains(a.toLowerCase())));
final res = isLastNameValid && isFirstNameValid;
if (res) {
return (true, 'ocr_lines', this);
}
final nameValidation = names.any(
(a) =>
"${a.firstName} ${a.lastName} ${a.middleName ?? ''}".toUpperCase().split(" ").any((b) => firstName.split(" ").every((fn)=>b.contains(fn.toUpperCase()))) ||
"${a.firstName} ${a.lastName} ${a.middleName ?? ''}".toUpperCase().split(" ").any((b) => lastName.split(" ").every((ln)=>b.contains(ln.toUpperCase()))),
);
if (nameValidation) {
return (true, 'provided_list', this);
}else{
if (names.isNotEmpty) {
final nameValidation = names.firstWhereOrNull((a) => noKcomparisonContain(a, firstname: firstName, lastname: lastName));
if (nameValidation != null) {
MrzName fixed = nameValidation.toMrzName();
return (true, 'contain provided_list', fixed);
} else {
final similarName = findMostSimilarByNameData(names, firstname: firstName, lastname: lastName);
if (similarName != null) {
MrzName fixed = similarName.toMrzName();
return (true, 'contain similar provided_list', fixed);
}
}
}
}
return (false, 'failed', this);
}
}