Está en la página 1de 3

#!

/usr/bin/python
#librerias necesarias para el funcionamiento del programa
import cgi #cgi para recibir la informacion del formulario
import string #libreria string para la manupulacion de cadenas
def consonantes(cadena): #funcion para encontrar la primera consonante de una
cadena
for index in range(len(cadena)):
if cadena[index]=='a'or cadena[index]=='e'or cadena[index]=='i'o
r cadena[index]=='o'or cadena[index]=='u'or cadena[index]==cadena[0]:
print""
else:
primer_consonante=cadena[index]
return string.upper(primer_consonante)
def vocales(cadena): #funcion para encontrar la primera vocal de una cad
ena
for index in range(len(cadena)):
if cadena[index]=='a'or cadena[index]=='e'or cadena[index]=='i'o
r cadena[index]=='o'or cadena[index]=='u'or cadena[index]!=cadena[0]:
primer_vocal=cadena[index]
return string.upper(primer_vocal)
ifila="<tr>"
icelda="<td>"
ffila="</tr>" #cadenas para tablas en html usadas para imprimir la base de dato
s en una pagina web
fcelda="</td>"
def CURP(): #funcion para calcular el CURP
print "Content-type: text/html\n"
print "<html><head><title>CURP</title></head><body><p>\n"# Prints para d
ar inicio a la pagina web
datos = cgi.FieldStorage() #a la variable datos se le asigna todo el con
tenido del cgi.FieldStorage
if datos.has_key("Name") \
and datos["Name"].value != "": #se busca la llave Name y si tie
ne valor..
nombres=datos["Name"].value #a variable nombres se le asigna
el conteido, que seran los nombres de la persona
Primer_Nombre=nombres.split(" ")[0] #se separan las cadenas con
split(si son dos nombres)
N1=Primer_Nombre[0] #N1 sera igual a la primera letra del primer
nombre
C3=consonantes(Primer_Nombre)#se usa la funcion consonantes para
encontrar la primera consonante del primer nombre
else:
return 0 #si no se encuentra la llave Name, se retorna valor 1
if datos.has_key("Ap") \
and datos["Ap"].value !="": #se busca la llave Ap y si tienen v
alor...
apellidos=datos["Ap"].value #la variable apellidos recibe el co
ntenido de Ap
Primer_Apellido=apellidos.split(" ")[0] #se separan las cadenas
por el espacio, la primera cadena sera el primer apellido...
Segundo_Apellido=apellidos.split(" ")[1]#y la segunda cadena el
segundo apellido
C1=consonantes(Primer_Apellido)#se obtiene la primer consonante
del primer apellido(o segunda si comienza con consonante)
C2=consonantes(Segundo_Apellido)#se obtiene la primer consonante
del segundo apellido...
A1_A=Primer_Apellido[0]#se obtiene la inicial de el primer apell
ido
A1_B=vocales(Primer_Apellido)# y su primer vocal...
A1="".join([A1_A,A1_B])# se juntan con join
A1=string.upper(A1)# y se convierten en mayusculas
A2=Segundo_Apellido[0]# se obtiene la inicial del segundo apelli
do
else:
return 0 #si no se encuentra la llave Ap, se retorna el valor 1
if datos.has_key("FN") \
and datos["FN"].value !="": # se busca la llave FN(Fecha de naci
miento) y si tiene valor...
FN=datos["FN"].value #si es asi, la variable FN recibe el conten
ido de la llave FN
dia=FN.split("/")[0]#se separan las cadenas usando "/" como sepa
rador... la primer cadena sera el dia
mes=FN.split("/")[1]# la segunda cadena el mes
ano=FN.split("/")[2]# y la tercera el anio
else:
return 0 #si no se encuentra la llave FN, se retorna el valor 1
if datos.has_key("GN")\
and datos["GN"].value !="": # se busca la llave GN(genero), y si
se encuentra se checa que tenga valor..
gen=datos["GN"].value #si lo tiene se asigna a la variable gen
else:
return 0 #si no se encuentra la llave GN, se retorna 1
if datos.has_key("LN")\
and datos["LN"].value !="": # igualmente se busca la llave LN(Lu
gar de Nacimiento), y que esta tenga valor
LN= datos["LN"].value # si lo tiene se asigna a la variable LN
else:
return 0# de otra forma se retorna 1
SEMICURP="".join([A1,A2,N1,ano,mes,dia,gen,LN,C1,C2,C3]) # se juntan las
cadenas de los datos obtenidos en el orden necesario para obtener..
bd = open("bd.txt","r") #los primeros 1
6 caracteres de el CURP
basedatos=bd.readlines()#se abre un archivo para lectura, y se lee su co
ntenido para asignarlo a la variable basedatos
contador=0
for index in range(len(basedatos)):
if basedatos[index].find(SEMICURP)>=0: # se busca(find) en la va
riable basedatos, la cadena SEMICURP, para saber si esta repetida
contador=contador+1 # si se encuentra entonces se le agr
ega uno a la variable contador
homoclave="0%d" %contador #si se repite el semicurp entonces la homoclav
e tendra un valor de 01 al 09
bd.close()#se cierra el archivo
CURP="".join([SEMICURP,homoclave]) #ahora se juntan las cadenas SEMICURP
y homoclave, para obtener el "CURP" completo
info=[nombres,apellidos,FN,gen,LN,CURP] #se asignan las cadenas de la in
formacion personal a la variable info
bdhtml = open("bd.html","a") #ahora abrimos un archivo html para poder i
mprimir en una pagina web la base de datos
bdhtml.write(ifila) #se escribe en el archivo la cadena "ifila" que corr
esponde a <tr> para empezar una fila en html
for index in range(len(info)): #se barre el contenido de info, que es un
arreglo de cadenas
bdhtml.write(icelda) #se escribe la cadena "icelda", que corresp
onde a <td> para empezar una celda
bdhtml.write(info[index]) # se escribe el contenido de info[inde
x] donde index ira aumentando hasta terminar el arreglo
bdhtml.write(fcelda) # se imprime el fin de la celda(</td>)
bdhtml.write(ffila)# se imprime el fin de la fila(</tr>)
bdhtml.close()#el archivo se cierra
newline="\n" #un par de variables para poder imprimir los caracteres \n
y \t en un archivo
tab="\t"
bd = open("bd.txt","a") # se abre el archivo bd para agregar al final
for index in range(len(info)):
bd.write(info[index]) #igual que antes, se imprime la informacio
n personal pero ahora en una base de datos en .txt
bd.write(tab) #se escribe un tabulador para acomodar mejor la in
formacion
bd.write(newline) #se pasa a una linea nueva para fines de facilitar la
lectura del archivo
bd.close()#se cierra el archivo
print "Tu CURP es %s<br/><br/>" % CURP #en html se imprime el curp
return 1 #y se retorna 0
# "main"
a=CURP() #a la variable a se le asigna el contenido de CURP, que sera un 0 si se
obtuvo el CURP, o un 1 si falto llenar algun campo
if a==0:
print "Porfavor llene TODOS los campos" #si a es igual a 0(no se lleno a
lgun campo) se pide que se llenen todos los campos
print "</p></body></html>"

También podría gustarte