validateMrzLine function
OcrMrzValidation
validateMrzLine({
- required String line1,
- required String line2,
- required String code,
- required OcrMrzSetting setting,
- required List<
String> otherLines, - required String firstName,
- required String lastName,
- required String country,
- required String nationality,
- required String personalNumber,
- required List<
NameValidationData> ? nameValidations,
Implementation
OcrMrzValidation validateMrzLine({
required String line1,
required String line2,
required String code,
required OcrMrzSetting setting,
required List<String> otherLines,
required String firstName,
required String lastName,
required String country,
required String nationality,
required String personalNumber,
required List<NameValidationData>? nameValidations,
}) {
OcrMrzValidation validation = OcrMrzValidation();
try {
validation.linesLengthValid = (line2.length == 44 && line1.length == 44);
String docCode = code;
bool isDocCodeValid = DocumentCodeHelper.isValid(docCode);
validation.docCodeValid = isDocCodeValid;
String docNumber = line2.substring(0, 9);
String docCheck = line2[9];
bool isDocNumberValid = _computeMrzCheckDigit(docNumber) == docCheck;
validation.docNumberValid = isDocNumberValid;
String birthDate = line2.substring(13, 19);
String birthCheck = line2[19];
bool isBirthDateValid = (RegExp(r'^\d{6}$').hasMatch(birthDate) && _computeMrzCheckDigit(birthDate) == birthCheck);
validation.birthDateValid = isBirthDateValid;
String expiryDate = line2.substring(21, 27);
String expiryCheck = line2[27];
bool isExpiryDateValid = (RegExp(r'^\d{6}$').hasMatch(expiryDate) && _computeMrzCheckDigit(expiryDate) == expiryCheck);
validation.expiryDateValid = isExpiryDateValid;
// String personalNumber = personalNumber;
String personalCheck = line2[42];
final isPersonalValid = personalNumber.replaceAll('<', '').isEmpty
? (personalCheck == '0' || personalCheck == '<')
: (_computeMrzCheckDigit(personalNumber) == personalCheck);
validation.personalNumberValid = isPersonalValid;
String finalCheck = line2[43];
bool isFinalCheckValid = _computeMrzCheckDigit(docNumber + docCheck + birthDate + birthCheck + expiryDate + expiryCheck + personalNumber + personalCheck) == finalCheck;
validation.finalCheckValid = isFinalCheckValid;
bool validNames = validateNames(firstName, lastName, otherLines);
bool isNamesValid = validNames;
validation.nameValid = isNamesValid;
if(!isNamesValid && nameValidations!=null){
if(nameValidations.any((a)=>a.firstName.toLowerCase() == firstName.toLowerCase() && a.lastName.toLowerCase()==lastName.toLowerCase())){
isNamesValid = true;
validation.nameValid = true;
}
}
bool validCountry = isValidMrzCountry(country);
bool isValidCountry = validCountry;
validation.countryValid = isValidCountry;
bool validNationality = isValidMrzCountry(nationality);
bool isValidNationality = validNationality;
validation.nationalityValid = isValidNationality;
return validation;
} catch (e) {
return validation;
}
}