domingo, 19 de septiembre de 2010

Proyecto de Medio Curso

Aplicación Web con Python

Como proyecto de medio curso escogí hacer una aplicación web que por medio de formularios y CGI, recibe del usuario información como: su nombre(s), apellidos, fecha de nacimiento, lugar de nacimiento y género, con el objetivo de "calcular" su CURP para publicarlo  y guardarlo en una base de datos.


VIDEO:



Pequeña definición del CURP:
[1].La Clave Única de Registro de Población (CURP) es un código único de Identidad tanto para residentes como para ciudadanos mexicanos. Tiene 18 caracteres, lo que impide que se generen duplicados. 

El algoritmo que use para calcular el CURP es el siguiente:
  1. Pedir datos: nombre(s), apellidos, fecha de nacimiento, género, lugar de nacimiento.
  2. El primer caractér del CURP será la primera letra de primer apellido.
  3. El segundo caractér será la primera vocal del primer apellido.
  4. El tercer caractér será la primera letra del segundo apellido.
  5. El cuarto caractér será la primera letra del primer nombre.
  6. El quinto y sexto caractér serán el año de nacimiento en formato (YY).
  7. El séptimo y octavo caractér serán el mes de nacimiento en formato (MM).
  8. El noveno y décimo caractér serán el dia de nacimiento en formato (DD).
  9. El décimo primer caractér será el género, si es hombre será una H, si es mujer M.
  10. El décimo segundo y décimo tercer caractér serán el lugar de nacimiento abreviado en 2 letras.
  11. El décimo cuarto caractér será la primera consonante del primer apellido(en caso de que el apellido inicie con consonante, entonces será la segunda consonante)
  12. El décimo quinto caractér será la primera consonante del segundo apellido.
  13. El décimo sexto caractér será la primera consonante del primer nombre.
  14. Para términar los últimos dos caracteres(homoclave), legalmente son generados por el RENAPO(Registro Nacional de Población) para evitar repeticiones, pero por fines de prueba en mi aplicación web estos números corresponderán al orden que son agregados. Por ejemplo si no existe un GASE920821HNRLM al ser agregado este CURP a la base de datos tomará la homoclave 00. Si después es agregado otro GASE920821HNRLM la homoclave será 01 y así sucesivamente.
Ejemplo:
Mi programa en Python:
Nota: No subí el código completo porque llenaba el blog de mucha información, procure solo explicar las partes importantes.De todas formas está disponible al fin de la entrada para descargar desde google docs, lo subí desde Ubuntu así que es 100% libre de virus.

Explicación:


Al inicio lo que mi código hace por partes es verificar si existen ciertos campos: "Name","Ap","FN",etc. para asi poder leer de ellos la información recibida por formularios; pero además también verifica que estos campos no estén vacíos. 
Primero el "Name", si no esta vacío lo que hace es separar el contenido por su espacio (si lo tiene) para obtener el primer y segundo nombre, y de éstos obtener su inicial.
Además se obtiene su primera consonante interna usando una función que previamente declare, está función lo que hace es recibir una cadena y buscar en su contenido la primer consonante interna.

Igualmente se busca el campo "Ap", y se verifica que no este vacío. Si lo anterior se cumple separamos la cadena por su espacio(aquí normalmente es seguro que la persona tenga dos nombres pero si no los tiene[por ser extranjero,etc.] lo que pasara es que la inicial del segundo apellido será tomada como X y su primer consonante igualmente como X). Igualmente se obtienen sus iniciales y primer consonante interna. En el caso del primer apellido se obtiene su inicial, y su primer vocal interna necesarios para los primeros 2 caracteres del CURP.

Ahora con la fecha de nacimiento, si existe el campo "FN" y no esta vació, se separa su contenido usando como separador / y cada parte será, de izquierda a derecha, día,mes,año.
El género y el lugar simplemente se verifican que existan los campos y que no estén vacíos, y se asigna directamente el contenido a la variable gen y LN respectivamente.
Ya leída toda la información se junta en un "SEMICURP" y a continuación se busca en la base de datos si esté esta repetido o no. Si lo ésta un contador aumentará en uno cada vez que se encuentre para aseguranos de que no haya CURPS repetidos. Ya verificada la base de datos, se junta el SEMICURP con el contador y se obtiene el CURP completo.
Lo demás es imprimirlo en un documento .html para poder ilustrarlo en una página web.


Cabe destacar que si algún campo no es llenado, se arrojara el mensaje "Por favor llene todos los campos" porque en éste programa es necesaria toda la información,ésto es debido a que si no se cumple alguna condición de que exista el campo o no este vacío, se retornara 0 y al final si un 0 es retornado se da ese mensaje. 
Página Web


Tanto el código web como el CSS me parece innecesario explicarlo por aquí porque todo lo que escribí en el es sencillo y no creo que sea innecesario explicarlo. Aún así le agregue comentarios para los puntos importantes de él, por si desean descargarlo.


La página web donde coloque el formulario, ya con estilos y todo, quedaría de la siguiente manera.




Donde Base de Datos, es el lugar donde se publican los CURPS después de ser ingresados.


Si desean descargarlo para checar el código o probarlo:


Cualquier comentario, duda o crítica es bienvenido.

2 comentarios:

  1. Muy bien. Te pongo 28 puntos por este primer proyecto; si quieres recuperar los 2, pon en una entrada nueva una explicación del formato en el cual guardas los CURPs consultados y el programa que lee ese archivo y checa por duplicados.

    ResponderEliminar