Skip to content

Instantly share code, notes, and snippets.

@CarlosRA97
Last active October 13, 2023 03:12
Show Gist options
  • Select an option

  • Save CarlosRA97/12b95d0d524e8bb52cb54feccbb91774 to your computer and use it in GitHub Desktop.

Select an option

Save CarlosRA97/12b95d0d524e8bb52cb54feccbb91774 to your computer and use it in GitHub Desktop.

Revisions

  1. CarlosRA97 revised this gist Oct 13, 2023. 1 changed file with 8 additions and 3 deletions.
    11 changes: 8 additions & 3 deletions mrzParser.py
    Original file line number Diff line number Diff line change
    @@ -104,8 +104,13 @@ def writer_format(info: list):
    new_info.insert(i, ".")
    return new_info

    def activate(title: str):
    pygetwindow.getWindowsWithTitle(title)[0].activate()
    def activate(title: str, maximize = False):
    w = pygetwindow.getWindowsWithTitle(title)[0]
    if not w.isActive:
    w.activate()
    if maximize:
    w.maximize()



    def write_to_active_window(info: list):
    @@ -148,7 +153,7 @@ def save(info):

    save(info)

    activate("K-HOTEL for Windows")
    activate("K-HOTEL for Windows", maximize=True)
    time.sleep(1)
    write_to_active_window(info)
    pyautogui.click(x=add_line_x, y=add_line_y, clicks=1, interval=0, button='left')
  2. CarlosRA97 revised this gist Oct 13, 2023. 1 changed file with 128 additions and 32 deletions.
    160 changes: 128 additions & 32 deletions mrzParser.py
    Original file line number Diff line number Diff line change
    @@ -1,64 +1,160 @@
    #!/usr/local/bin/python3
    from datetime import datetime
    from mrz.checker.td1 import TD1CodeChecker
    from mrz.checker.td2 import TD2CodeChecker
    from mrz.checker.td3 import TD3CodeChecker

    import pyautogui
    import pygetwindow
    import time
    from getpass import getpass

    def parse_date(date):
    return datetime.strptime(date, "%y%m%d").strftime("%d/%m/%Y")

    def print_relevant_info(fields):
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )

    def mrz_parser(mrz):
    def parse_date(date: datetime):
    return datetime.strptime(date, "%y%m%d")

    def add_year(date: datetime, year: int):
    return datetime(date.year+year, date.month, date.day, date.hour, date.minute, date.second, date.microsecond, date.tzinfo)

    def print_relevant_info(relevant_info: list):
    print(str.join(" ",relevant_info))

    def validity_years(birth_date: datetime):
    now = datetime.now()

    yo = now.year-birth_date.year
    years = 0
    if (5 <= yo < 30):
    years = 5
    elif (30 <= yo < 70):
    years = 10

    return years

    def document_type_parse(document_type, country):
    if document_type == "ID" and country == "ESP":
    document_type = "D"
    elif document_type == "ID" and country != "ESP":
    document_type = "I"
    return document_type

    def relevant_info(fields):
    document_type = document_type_parse(fields.document_type, fields.country)
    birth_date = parse_date(fields.birth_date)
    expiry_date = parse_date(fields.expiry_date)

    validity_year = validity_years(birth_date)
    expiry_date = add_year(expiry_date, -validity_year)

    document_number = fields.document_number
    if fields.optional_data != "":
    document_number = fields.optional_data

    surname = fields.surname.split(" ")

    return [
    document_type,
    document_number,
    expiry_date.strftime("%d%m%Y")
    ] + surname + [
    fields.name,
    fields.sex,
    birth_date.strftime("%d%m%Y"),
    fields.nationality
    ]

    def clean_mrz_input(mrz: str):
    mrz = mrz.replace(";", "<")
    mrz = mrz.replace("\n", "")
    return mrz


    def mrz_parser(mrz: str):
    mrz = clean_mrz_input(mrz)
    if (len(mrz) == 3*30): # TD1 ID Cards
    mrz = mrz[0:30] + "\n" + mrz[30:60] + "\n" + mrz[60:90]
    check = TD1CodeChecker(mrz)
    check = TD1CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print_relevant_info(fields)

    return
    return relevant_info(fields)

    elif (len(mrz) == 2*36): # TD2
    mrz = mrz[0:36] + "\n" + mrz[36:36*2]
    check = TD2CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print_relevant_info(fields)
    return

    elif (len(mrz) == 2*44):
    return relevant_info(fields)

    elif (len(mrz) == 2*44): # TD3: Passports
    mrz = mrz[0:44] + "\n" + mrz[44:44*2]
    check = TD3CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print_relevant_info(fields)
    return
    print(fields)
    return relevant_info(fields)

    else:
    print("")
    #print(mrz)
    print("Formato erroneo")
    return None

    return None

    def writer_format(info: list):
    new_info = info
    inserts = [2,5,-4,-3]
    for i in inserts:
    new_info.insert(i, ".")
    return new_info

    def activate(title: str):
    pygetwindow.getWindowsWithTitle(title)[0].activate()


    def write_to_active_window(info: list):
    info = writer_format(info)
    info = str.join("",info)
    info = info.split(".")
    for d in info:
    pyautogui.write(d)
    pyautogui.press('tab')


    def save(info):
    today = str(datetime.now().strftime("%d%m%Y"))
    fileName = "C:/Users/torre/Desktop/FICHEROS POLICIA/DNIESCANEADO/Clientes-{}.txt".format(today)
    output = "{}\n{}\n{}".format(
    "\n----- Check-In: " + str(datetime.now().strftime("[%d/%m/%Y, %H:%M:%S]")) + " ------ ",
    str.join(" ",info),
    "-------------------------------------------\n"
    )

    f = open(fileName, "a")
    f.write(output)
    f.close()


    add_line_x = 880
    add_line_y = 620

    print("Use el lector para escanear los documentos de identidad\n\n")
    print("Formato:\nTipo Doc. -- NºDoc -- Fec. Expiracion -- Apell. -- Nom. -- Sexo -- Fec. Nac. -- Nac")
    while True:
    mrz = getpass("")
    if (mrz == "q"):
    activate("K-HOTEL for Windows")
    exit()
    print("\n------ Cliente -----")
    mrz_parser(mrz)
    print("--------------------")

    info = mrz_parser(mrz)
    if (info == None):
    continue

    save(info)

    activate("K-HOTEL for Windows")
    time.sleep(1)
    write_to_active_window(info)
    pyautogui.click(x=add_line_x, y=add_line_y, clicks=1, interval=0, button='left')
    time.sleep(1)
    activate("Lector Doc. Identidad")

    print("\n------ Cliente -----")
    print_relevant_info(info)
    print("--------------------")
  3. CarlosRA97 revised this gist Oct 4, 2023. 1 changed file with 25 additions and 33 deletions.
    58 changes: 25 additions & 33 deletions mrzParser.py
    Original file line number Diff line number Diff line change
    @@ -3,19 +3,13 @@
    from mrz.checker.td2 import TD2CodeChecker
    from mrz.checker.td3 import TD3CodeChecker

    from getpass import getpass

    def parse_date(date):
    return datetime.strptime(date, "%y%m%d").strftime("%d/%m/%Y")

    def mrz_parser(mrz):
    mrz = mrz.replace(";", "<")
    mrz = mrz.replace("\n", "")
    if (len(mrz) == 3*30): # TD1 ID Cards
    mrz = mrz[0:30] + "\n" + mrz[30:60] + "\n" + mrz[60:90]
    check = TD1CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    def print_relevant_info(fields):
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    @@ -24,48 +18,46 @@ def mrz_parser(mrz):
    parse_date(fields.birth_date),
    fields.nationality
    )

    def mrz_parser(mrz):
    mrz = mrz.replace(";", "<")
    mrz = mrz.replace("\n", "")
    if (len(mrz) == 3*30): # TD1 ID Cards
    mrz = mrz[0:30] + "\n" + mrz[30:60] + "\n" + mrz[60:90]
    check = TD1CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print_relevant_info(fields)

    return
    elif (len(mrz) == 2*36): # TD2
    mrz = mrz[0:36] + "\n" + mrz[36:36*2]
    check = TD2CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )
    print_relevant_info(fields)
    return

    elif (len(mrz) == 2*44):
    mrz = mrz[0:44] + "\n" + mrz[44:44*2]
    check = TD3CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )
    print_relevant_info(fields)
    return

    else:
    print(mrz)
    print("")
    #print(mrz)

    with open("Clientes.txt", "r") as clientes:
    for mrz in clientes:
    print("------ Cliente -----")
    mrz_parser(mrz)
    print("--------------------")

    while True:
    mrz = getpass("")
    if (mrz == "q"):
    exit()
    print("\n------ Cliente -----")
    mrz_parser(mrz)
    print("--------------------")



  4. CarlosRA97 created this gist Oct 4, 2023.
    72 changes: 72 additions & 0 deletions mrzParser.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    from datetime import datetime
    from mrz.checker.td1 import TD1CodeChecker
    from mrz.checker.td2 import TD2CodeChecker
    from mrz.checker.td3 import TD3CodeChecker


    def parse_date(date):
    return datetime.strptime(date, "%y%m%d").strftime("%d/%m/%Y")

    def mrz_parser(mrz):
    mrz = mrz.replace(";", "<")
    mrz = mrz.replace("\n", "")
    if (len(mrz) == 3*30): # TD1 ID Cards
    mrz = mrz[0:30] + "\n" + mrz[30:60] + "\n" + mrz[60:90]
    check = TD1CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )
    return
    elif (len(mrz) == 2*36): # TD2
    mrz = mrz[0:36] + "\n" + mrz[36:36*2]
    check = TD2CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )
    return

    elif (len(mrz) == 2*44):
    mrz = mrz[0:44] + "\n" + mrz[44:44*2]
    check = TD3CodeChecker(mrz)
    if bool(check):
    fields = check.fields()
    print(fields.document_type,
    fields.optional_data,
    parse_date(fields.expiry_date),
    fields.surname,
    fields.name,
    fields.sex,
    parse_date(fields.birth_date),
    fields.nationality
    )
    return

    else:
    print(mrz)

    with open("Clientes.txt", "r") as clientes:
    for mrz in clientes:
    print("------ Cliente -----")
    mrz_parser(mrz)
    print("--------------------")