-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCalculadora RFC con Homoclave México.py
143 lines (110 loc) · 4.81 KB
/
Calculadora RFC con Homoclave México.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Crear la parte logica basica de un programa que calcule el el RFC con
# homoclave para México
# REGLAS PARA GENERAR EL RFC
# En más de una ocasión nos encontraremos con algunas ambigüedades al momento
# de extraer las letras de los apellidos o nombres. Es por eso que debemos
# tener en cuenta las siguientes reglas al momento de generar el RFC:
# Si el nombre es compuesto, se considerará el primer nombre excepto cuando sea
# María o José, en cuyo caso se utilizará el segundo nombre.
# Si alguno de los apellidos es compuesto, se considerará la primera palabra
# para formar el RFC.
# Cuando en el nombre o apellidos figuren artículos, preposiciones,
# conjunciones o contracciones no se tomarán en cuenta para la
# generación del RFC.
# Cuando el apellido paterno se componga de una o dos letras entonces las
# letras del RFC se formarán de la siguiente manera: la primera letra del
# apellido paterno seguida de la primera letra del apellido materno y la
# primera y segunda letra del nombre.
# En caso de tener un solo apellido, las letras del RFC serán la primera y
# segunda letra del apellido más la primera y segunda letra del nombre.
# Cuando las cuatro letras del RFC formen una palabra inconveniente, la última
# letra será sustituida por una “X”.
# Otra función que necesitaremos implementar será la que nos ayude a suprimir
# los artículos, preposiciones, conjunciones y contracciones contenidas en el
# nombre o apellidos ya que, como lo establece la regla, dichas palabras no
# serán utilizadas en la generación del RFC.
# El detalle de cada una de estas reglas podrás consultarlo en el documento
# publicado por el IFAI que mencioné al principio del artículo.
Text_Title = 'Calcula RFC Persona Fisica'
dashtitle = '-' * int((int(78) - len(Text_Title)) / 2)
print(dashtitle + Text_Title + dashtitle)
# Declaramos las variables
nomUpper = ''
nombreNoPreps = ''
nom1 = ''
nom2 = ''
paterno = ''
materno = ''
# Solicitamos el nombre completo de la persona
nomCompleto = str(input('Ingrese su nombre completo: '))
# Solicitamos su Fecha de Nacimiento
fechaNacimiento = str(
input('Ingrese fecha de nacimiento con el formato dd / mm / aaaa: '))
# Damos formato al nombre al reemplazar cualquier vocal acentuada poniendo
# el texto en mayusculas lo cual es de suma importancia porque
# el RFC no admite acentos.
def formatoAlNombre(nomCompleto):
global nomUpper
vocalesConAcento = {"Á": "A", "É": "E", "Í": "I", "Ó": "O", "Ú": "U"}
nomUpper = nomCompleto.upper()
for letraAcen in vocalesConAcento.keys():
nomUpper = nomUpper.replace(
letraAcen, vocalesConAcento.get(letraAcen))
return nomUpper
# Continuamos dando formato al nombre al reemplazar cualquier vocal acentuada
# poniendo el texto en mayusculas lo cual es de suma importancia porque el RFC
# no admite preposiciones o artuculos como en "del Campo".
def removerPreposiciones():
global nomUpper
prepsArtics = (" PARA ", " AND ", " CON ", " DEL ", " LAS ", " LOS ",
" MAC ", " POR ", " SUS ", " THE ", " VAN ", " VON ",
" AL ", " DE ", " EL ", " EN ", " LA ", " MC ", " MI ",
" OF ", " A ", " E ", " Y ")
for prep in prepsArtics:
nomUpper = nomUpper.replace(prep, " ")
return nomUpper
# Continuamos con el formato y removemos los nombres comunes solo si la persona
# tiene un segundo nombre y abreviaciones conforme a las reglas estipuladas
def removerNombresComunes():
global nomUpper
nombresComunes = (" MARIA ", " MARIA", "MARIA ", "JOSE ", " JOSE ",
" JOSE", " MA. ", " MA ", " J. ", " J ")
for nombreComun in nombresComunes:
nomUpper = nomUpper.replace(nombreComun, "")
return nomUpper
# Dividir el nombre y obtener las letras que componen el RFC y agregar la fecha
def dividirElNombre():
global nomUpper
global fechaNacimiento
nomUpper = nomUpper.split(' ')
fechaNacimiento = fechaNacimiento.split('/')
if len(nomUpper) == 4:
nom1 = nomUpper[0]
nom2 = nomUpper[1]
paterno = nomUpper[2]
materno = nomUpper[3]
letras1 = paterno[0:2]
letras2 = materno[0]
letras3 = nom1[0]
print(letras1, letras2, letras3)
print(nom1, nom2, paterno, materno)
if len(nomUpper) != 4:
nom1 = nomUpper[0]
paterno = nomUpper[1]
materno = nomUpper[2]
paterno = nomUpper[2]
materno = nomUpper[3]
letras1 = paterno[0:1]
letras2 = materno[0]
letras3 = nom1[0]
print(letras1, letras2, letras3)
print(nom1, nom2, paterno, materno)
año = fechaNacimiento[2][2:]
mes = fechaNacimiento[1]
dia = fechaNacimiento[0]
print(año, mes, dia)
formatoAlNombre(nomCompleto)
removerPreposiciones()
removerNombresComunes()
dividirElNombre()
# print(nomUpper)