textToIdCard method

Map<String, String?> textToIdCard(
  1. String text, {
  2. required String? inputName,
  3. required String? inputFatherName,
  4. required String? inputIdCardNumber,
  5. required String? inputExpiryDate,
  6. required String? inputIssueDate,
  7. required String? inputBirthDate,
  8. required String? inputGender,
  9. required String? inputCountry,
})

Implementation

Map<String, String?> textToIdCard(
  String text, {
  required String? inputName,
  required String? inputFatherName,
  required String? inputIdCardNumber,
  required String? inputExpiryDate,
  required String? inputIssueDate,
  required String? inputBirthDate,
  required String? inputGender,
  required String? inputCountry,
}) {
  String? country = getCountry(text);
  text = removeStopWords(text);
  String namePrefix = 'Name ';
  String fatherNamePrefix = 'Father Name ';
  // String identityNumberPrefix = 'Identity Number ';
  String? idCardNumber = extractIdCardNumber(text);
  removeFromText(text, idCardNumber);
  String? name = getValueFromPrefix(text, namePrefix, split: ' @@ ')?.trim();
  removeFromText(text, name);
  String? fatherName =
      getValueFromPrefix(text, fatherNamePrefix, split: ' @@ ')?.trim();
  removeFromText(text, fatherName);
  // String? idcardNumber = getValueFromPrefix(text, identityNumberPrefix);

  String gender = getGender(text);
  // String? country = gender == 'F'
  //     ? getValueFromPrefix(text, ' F ')
  //     : getValueFromPrefix(text, ' M ');

  // print(text);
  RegExp dateRegex = RegExp(
      r"(?:(\d{2})\.(\d{2})\.(\d{4})).*?(?:(\d{2})\.(\d{2})\.(\d{4})).*?(?:(\d{2})\.(\d{2})\.(\d{4}))");
  Match? dateMatch = dateRegex.firstMatch(text);
  String? dateOfBirth;
  String? dateOfIssue;
  String? dateOfExpiry;
  if (dateMatch != null) {
    int birthDay = int.parse(dateMatch.group(1)!);
    int birthMonth = int.parse(dateMatch.group(2)!);
    int birthYear = int.parse(dateMatch.group(3)!);

    int issueDay = int.parse(dateMatch.group(4)!);
    int issueMonth = int.parse(dateMatch.group(5)!);
    int issueYear = int.parse(dateMatch.group(6)!);

    int expiryDay = int.parse(dateMatch.group(7)!);
    int expiryMonth = int.parse(dateMatch.group(8)!);
    int expiryYear = int.parse(dateMatch.group(9)!);

    dateOfBirth = "$birthDay.$birthMonth.$birthYear";
    dateOfIssue = "$issueDay.$issueMonth.$issueYear";
    dateOfExpiry = "$expiryDay.$expiryMonth.$expiryYear";
  }
  print('************');

  // print('Name: $name');
  // print('Father\'s Name: $fatherName');
  // print('id card number $idCardNumber');
  // print('dateOfExpiry  $dateOfExpiry');
  // print('dateOfIssue   $dateOfIssue');
  // print('dateOfBirth   $dateOfBirth');
  // print('Gender   $gender');
  // print('country  $country');
  if (dateOfIssue != null && dateOfExpiry != null && dateOfBirth != null) {
    List<String> sortedDates =
        sortDates([dateOfBirth, dateOfExpiry, dateOfIssue]);

    dateOfBirth = sortedDates[0];
    dateOfIssue = sortedDates[1];
    dateOfExpiry = sortedDates[2];
    removeFromText(text, dateOfBirth);
    removeFromText(text, dateOfIssue);
    removeFromText(text, dateOfExpiry);
  }

  Map<String, String?> idCardData = {
    'name': name ?? inputName,
    'father_name': fatherName ?? inputFatherName,
    'id_card_number': idCardNumber ?? inputIdCardNumber,
    'date_of_expiry': dateOfExpiry ?? inputExpiryDate,
    'date_of_issue': dateOfIssue ?? inputIssueDate,
    'date_of_birth': dateOfBirth ?? inputBirthDate,
    'gender': gender,
    'country': country ?? inputCountry
  };
  print(idCardData);
  return idCardData;
}