170 lines
5.0 KiB
Python
170 lines
5.0 KiB
Python
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
|