import regex as re from variables import * def comprobarLetra(dni: str): num = int(dni[:-1]) letra = dni[-1] if letras[num % 23] != letra: return False else: return True def validarTelefono(telefono): # revisar sesión 6 ej 1 match = T.match(telefono) if match is not None: # if match.group('prefijo') is None: # prefijo = '+34' # else: # prefijo = match.group('prefijo') return { # 'prefijo': prefijo, 'parte1': match.group('parte1'), 'parte2': match.group('parte2'), 'parte3': match.group('parte3'), } return None def validarDni(dni): match = D.match(dni) if match and match['letrainicio']: valido = comprobarLetra(f"{reemplazo_nie[match['letrainicio']]}{match['numero']}{match['letrafinal']}") if valido: return { 'letrainicio': match.group('letrainicio'), 'numero': match.group('numero'), 'letrafinal': match.group('letrafinal'), } return None elif match and not match['letrainicio']: valido = comprobarLetra(f"{match['numero']}{match['letrafinal']}") if valido: return { 'numero': match['numero'], 'letrafinal': match.group('letrafinal'), } return None else: return None def validarInstante(instante): match = I.match(instante) if match and not match['segundo']: # formato 1 return { 'año': match.group('anyo'), 'mes': match.group('mes'), 'dia': match.group('dia'), 'hora': match.group('hora'), 'minuto': match.group('minuto'), 'segundo': '00' } elif match and match['segundo']: # formatos 2 y 3 return { 'año': match.group('anyo'), 'mes': match.group('mes'), 'dia': match.group('dia'), 'hora': match.group('hora'), 'minuto': match.group('minuto'), 'segundo': match.group('segundo'), } else: return None def decimalGrado(numero): a = float(numero) grados = int(numero) b = a - grados minutos = int(b*60) c = b*60-minutos segundos = int(c*60) return grados,minutos,segundos def gradoDecimal(grados,minutos,segundos): a = float(segundos)/3600 + float(minutos)/60 + float(grados) return a def validarCoordenada(cadena, form): if P.fullmatch(): M = P.fullmatch() if M.group("Grados1"): grados1 = M.group("Grados1") grados2 = M.group("Grados2") minutos1 = M.group("Minutos1") minutos2 = M.group("Minutos2") segundos1 = M.group("Segundos1") segundos2 = M.group("Segundos2") letra1 = M.group("Letra1") letra2 = M.group("Letra2") num1 = gradoDecimal(grados1,minutos1,segundos1) num2 = gradoDecimal(grados2,minutos2,segundos2) if letra1 == 'N': simb1 = '+' else: simb1 = '-' if letra2== 'E': simb2 = '+' else: simb2 = '-' else: num1 = float(M.group("Coord1")) num2 = float(M.group("Coord2")) simb1 = M.group("Signo1") simb2 = M.group("Signo2") if form == 1: return f'{simb1}{round(num1,4)}, {simb2}{round(num2,4)}' elif form == 2: grados1, minutos1, segundos1= decimalGrado(num1) grados2, minutos2, segundos2 = decimalGrado(num2) if simb1 == '+': letra1 = 'N' else: letra1 = 'S' if simb2 == '+': letra2 = 'E' else: letra2 = 'W' return f'{grados1}º {minutos1}\' {segundos1:}.0000" {letra1}, {grados2}º {minutos2}\' {segundos2}.0000" {letra2}' elif form == 3: grados1, minutos1, segundos1 = decimalGrado(num1) grados2, minutos2, segundos2 = decimalGrado(num2) if simb1 == '+': letra1 = 'N' else: letra1 = 'S' if simb2 == '+': letra2 = 'E' else: letra2 = 'W' return f'{grados1:0>3}{minutos1:0>2}{segundos1:0>2}.0000{letra1}{grados2:0>3}{minutos2:0>2}{segundos2:0>2}.0000{letra2}' else: return None def validarEntrada(entrada): telefono, dni, fecha, coordenadas, producto, coste = entrada.split(";") tel = validarTelefono(telefono.strip()) dni = validarDni(dni.strip()) fecha = validarInstante(fecha.strip()) coordenadas = validarCoordenada(coordenadas.strip()) valores = { 'telefono': tel, 'dni': dni, 'fecha': fecha, 'coordenadas': coordenadas, 'producto': producto, 'coste': coste, } for k in valores.keys(): if valores[k] is None: return None return valores