martes, 30 de noviembre de 2010

CALCULO DE LA CURP PARA PODER INCLUIRLA EN SUS APLICACIONES...EN C#

Hace unos días publiqué la manera de como poder obtener el RFC, para personas morales y físicas, para poder integrarlo en sus aplicaciones.
En esta ocasión quiero mostrarles como hacer el cálculo de la CURP, ya que seguramente algunas vez en clases han hecho tareas de las materias de Chico, Serafín o Clemente, y en sus formularios incluyen un campo que se llama CURP, pues con solo conocer los datos de nacimiento de la persona podrán hacer el cálculo de la CURP, sin verse en la molestia de tener que teclear los 18 dígitos que la integran.

Requisitos:
·        Microsoft Visual Studio 2008
·        Unos cuantos nombres de personas para prueba….
Iniciando
Lo primero que haremos será crear un nuevo proyecto del tipo Windows Form, en este caso lo llamaré “ObtieneCURP”, el diseño deberá quedar más o menos así:
A continuación declaramos las siguientes variables, de alcance global:
        char SEXO;
        string[,] estados;

SEXO”: Esta variable almacenará un dígito según el sexo elegido por el usuario (M=Masculino, F=Femenino).
ESTADOS”: Arreglo de dimensión 34*2 en el cual almacenaremos los estados con su respectivo código.

Luego declaramos el siguiente método:
/// <summary>
        /// AL perder el foco la caja de texto, convierte el texto a
        /// mayúsculas,para ello asignar este metodo al evento Leave
        /// del TextBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
       
        private void Mayus(object sender, EventArgs e)
        {
            TextBox texto = (TextBox)sender;
            texto.Text = texto.Text.ToUpper();
        }

Este método nos permitirá convertir el texto contenido en los texBox a mayúsculas, para ello en el evento “Leave” de los TexBox (el del apellido paterno, del materno y del nombre) asignar el método “Mayus()”.

Después, en el evento “Load()” del formulario agregamos el siguiente código:
private void Form1_Load(object sender, EventArgs e)
        {
            //string[,]
                estados =new string[,]
            {
                {"",""},
                {"AGUASCALIENTES","AS"},
                {"BAJA CALIFORNIA","BC"},
                {"BAJA CALIFORNIA SUR","BS"},
                {"CAMPECHE","CC"},
                {"CHIAPAS","CS"},
                {"CHIHUAHUA","CH"},
                {"COAHUILA","CL"},
                {"COLIMA","CM"},
                {"DISTRITO FEDERAL","DF"},
                {"DURANGO","DG"},
                {"GUANAJUATO","GT"},
                {"GUERRERO","GR"},
                {"HIDALGO","HG"},
                {"JALISCO","JC"},
                {"MEXICO","MC"},
                {"MICHOACAN","MN"},
                {"MORELOS","MS"},
                {"NAYARIT","NT"},
                {"NUEVO LEON","NL"},
                {"OAXACA","OC"},
                {"PUEBLA","PL"},
                {"QUERETARO","QT"},
                {"QUINTANA ROO","QR"},
                {"SAN LUIS POTOSI","SP"},
                {"SINALOA","SL"},
                {"SONORA","SR"},
                {"TABASCO","TC"},
                {"TAMAULIPAS","TS"},
                {"TLAXCALA","TL"},
                {"VERACRUZ","VZ"},
                {"YUCATÁN","YN"},
                {"ZACATECAS","ZS"},
                {"NACIDO EXTRANJERO","NE"}
            };
           
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            dateTimePicker1.CustomFormat = "yy/MM/dd";

            int contador=0;
            comboBox1.Items.Add("<Seleccione Estado>");
            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
            comboBox1.SelectedIndex = 0;
            while (contador != estados.Length / 2)
            {
                comboBox1.Items.Add(estados[contador,0]);
                contador++;
            }
            comboBox1.Items.Remove("");
        }
Lo que hacemos en estas líneas, es primeramente, llenar el arreglo con todos los estados y su respectivo código asignado para el cálculo de la CURP.
Luego asignamos el formato de cómo se muestra la fecha del “dateTimePicker” a personalizado (“año en dos cifras/mes/día”), después procedemos a llenar el “comboBox” de estados con lo que contiene el arreglo “estados”.

A continuación agregamos un nuevo método llamado “ObtieneSexo()”:
private string ObtieneSexo()
        {
            if (radioButton1.Checked)
            {
                SEXO = 'H';
            }
            else if (radioButton2.Checked)
            {
                SEXO = 'M';
            }
            else
            {
                SEXO = 'X';
            }

            return SEXO.ToString();
        }

Este método lo que hará es retornar un digito indicando el sexo elegido.

Luego procedemos a agregar la referencia a la librería “CURPLib”, que es la que nos generará la CURP, para ello hacemos click derecho sobre el proyecto (“ObtieneCURP”), y clicamos en “agregar referencia”, y elegimos la librería (se incluye en la carpeta donde viene el código fuente, aunque en el código fuente ya viene agregada la referencia).

Luego en el evento click del botón que hará el cálculo de la CURP agregamos las siguientes líneas:

private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(estados[comboBox1.SelectedIndex, 1]) || ObtieneSexo().Equals("X") || string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox3.Text))
            {
                MessageBox.Show("Por favor ingrese todos los datos...","Mira Bien...");
            }
            else
            {
                CURPLib.CURPLib calculocurp = new CURPLib.CURPLib();
                //MessageBox.Show(SEXO.ToString());
                textBox4.Text = calculocurp.CURPCompleta(textBox1.Text, textBox2.Text, textBox3.Text, dateTimePicker1.Text, ObtieneSexo(), estados[comboBox1.SelectedIndex, 1]);
                //.Show(estados[comboBox1.SelectedIndex,1]);
            }
        }

Primero se hace una validación que no haya campos vacios (solo se acepta apellido materno vacio), después creamos una nueva instancia de CURPLib, y luego  en la propiedad “Text” del campo donde se mostrará el CURP calculado, asignamos el resultado de ejecutar el método “CURPCompleta”, que recibe 6 parámetros: el apellido paterno, el apellido materno, el nombre, la fecha de nacimiento en formato de año en 2 dígitos/mes/día, el sexo y por último la clave de estado.
Para mostrar que funciona pueden probar con los siguientes datos:

Y el resultado mostrado deberá ser igual al de la imagen:.

Bueno pus parece que esto es todo por hoy, y no olviden hacer sus comentarios, se los agradeceré muchísimo….

J
El codigo fuente del ejemplo lo pueden descargar del siguiente enlace

45 comentarios:

  1. Al igual que para el cálculo del RFC, para calcular la CURP no me salve de meter la pata.Encontré un error del cálculo de la homoclave para los nacidos del año 2000 en adelante, la homoclave
    la calcula como "0", cuando debe de ser "A".
    Así que anexen la libreria corregida, y listooooooo!!!!!

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Aqui nuevamente.

    He estado probando el ejemplo que mandaste excelente (hasta por as claves de los estados que me han facilitado otras cosillas mas XD)..
    Y pues la gran duda de la DLL, no se si me puedas pasar el codigo fuente de ella.

    Claro todo con tu respectivo Copyright ©.

    Bueno un saludo.

    ResponderEliminar
  4. Hola buenos dias

    Este post y el de Calculo de RFC son excelentes, podrias por favor enviarme la dll de CURP que corregiste para probarla.

    pinp20@hotmail.com

    Muchas Gracias

    ResponderEliminar
  5. Colega,
    Podrías compartirme tu código fuente de CURPLib.dll?
    Muchas gracias.

    ccruzid@hotmail.com
    Carlos Cruz

    ResponderEliminar
  6. hola que tal yo tengo un problema al generar la curp de una persona cuando ingreso los datos:
    AP PATERNO: ACOSTA
    AP MATERNO: CHIQUITO
    NOMBRE: RODRIGO
    SEXO: HOMBRE
    FECHA NACIMIENTO: 1965/03/13
    ENT. FED.:VERACRUZ

    ME DA COMO RESULTADO: AOCR650313HVZCQD01
    Y EN REALIDAD NO ES QUE REALMENTE ES ESTA: AOCR650313HVZCHD01
    YA QUE EL SISTEMA ME DA MAL LA CURP QUE SUCEDE AI EL ERROR ESTA EN "CQ" Y ES "CH"

    ResponderEliminar
  7. hola que tal podrias coper tu codigo fuente detu libreria , lo que pasa que encontre uun error en el digtongo de los apellidos

    ResponderEliminar
  8. He encontrado algunos detalles porque se subió una versión no corregida. Subiré el código de la librería para que se pueda mejorar.

    ResponderEliminar
  9. Te agredeceria infitamente si subieras el codigo fuente de la libreria, gracias.

    o enviame a mi correo para ya incorporarlo a mi proyecto VB.net:
    ElohimSoft@hotmail.com

    ResponderEliminar
  10. Encontré un problema.
    no debería poner Ñ en la CURP, en su lugar debe poner X

    Muchas gracias por la DLL, buen trabajo :)

    ResponderEliminar
  11. ¿No estará basado en tu DLL este programa?
    http://elohimsoft.co.cc/?mastercurp,32

    Ya que TotoK te solicito los fuentes, por cierto ni siquiera deja calcular la clave, te pide que registres el programa pero siempre falla.

    Yo hice uno basado en un código oficial de la SEGOB:
    https://skydrive.live.com/?provision=1#cid=6947794B0D2461EA&id=6947794B0D2461EA%21300

    Saludos.

    ResponderEliminar
  12. Disculpas por no responder a tiempo.Aaron gracias por el comentario, Juan Carlos, te comento rápido, la dll tiene sus detalles ya que fue una pequeña practica que me dejaron en la preparatoria, pero fue creada implementando el algoritmo oficial. Si me dejan su correo podré mandar los archivos fuentes y el documento donde explica claramente el algoritmo.

    Saludos y gracias por sus comentarios.

    ResponderEliminar
    Respuestas
    1. Hola que tal buen dia

      Me podrías pasar el código en donde se hacen todos los cálculos de como sacar el CURP si no es mucha molestia.

      De ante mano gracias, que tengas un excelente día

      Eliminar
  13. Gracias Bers, mi correo es sodastereano@hotmail.com, como te mencione yo hice una calculadora CURP usando usando un código fuente oficial, por el momento lo tengo en modo consola.

    Este programa es un "micro fork" de MenuRaiz, originalmente era un programa para la captura de los datos necesarios para enviarlos
    a la Secretaria de Gobernación (SEGOB) para tramitar la CURP, es de distribución libre para las instituciones públicas y privadas
    autorizados por la SEGOB para hacer este trámite.

    Únicamente calcula los primeros 16 digitos (de 18) de la CURP, los 2 últimos lo asigna la SEGOB.

    Al menos la versión 3.2 esta hecho en Clipper, despues en Visual Fox Pro y la última es una aplicación web service.

    Revisando los archivos "muertos" del FIDELIST, encontre el diskette que contenia la versión 3.2, además del código fuente
    y el instructivo para calcular los últimos 2 digitos.

    Modifiqué el programa dejando solamente la parte para capturar los datos necesarios, ya calcula los últimos digitos y
    genera las posibles 10 claves CURP, ademas de poder buscarlo en la web de la SEGOB y calcular el RFC.

    En internet se pueden encontrar programas que hacen lo mismo (solo la primer clave posible) pero fallan en algunos nombres y
    generan una clave erronea, mi versión del programa tiene la ventaja en que esta basado en un código fuente oficial de la SEGOB.

    La clave CURP sera oficial cuando ya tengas la constacia expedida por la SEGOB o al menos si ya existe en la base de datos nacional
    de la CURP.

    El programa esta disponible en:

    https://skydrive.live.com/?provision=1#cid=6947794B0D2461EA&id=6947794B0D2461EA%21300

    ResponderEliminar
    Respuestas
    1. Excelente aporte, es justa la documentación que buscaba. Muchisimas gracias :D

      Eliminar
  14. hola que tal no se si puedan enviarme a mi correo el codigo fuente para poder corregirlo muy bueno ya lo probe soo que tiene errores pero no se si pueda ser en visual porfa

    ResponderEliminar
  15. mi correo el tobe_2493@hotmail.com

    ResponderEliminar
  16. hola que tal, podrias facilitarme el código fuente y los demás archivos?. porfavor te lo agradecería infinitamente.
    mi correo es: ain_agmo@hotmail.com

    ResponderEliminar
  17. hola que tal... he utilizado tu algoritmo y efectivamente tiene algunos detalles.

    serias tan amable de proporcionar tu dll corrgida a: alejandrobarajasavila@gmail.com

    Gracias...

    ResponderEliminar
  18. men me podias pasar tu dll please and oapuradillo con algo asi ejje gracias
    moy_elunico@hotmail.com

    ResponderEliminar
  19. porfa pasame tu codigo, mi correo es vsgfcOZ@gmail.com

    ResponderEliminar
  20. Hola,

    me podrías pasar la dll por favor, mi correo es ssalazarc36@hotmail.com

    gracias

    ResponderEliminar
  21. Hola,

    Serias tan amable de pasarme la dll, mi correo es:

    carranza_cl@hotmail.com

    Te lo agradezco de antemano.

    Saludos.

    ResponderEliminar
  22. Hola
    Podrias mandarme el .dll que mencionas por favor :)

    Gracias, Hasta Luego

    Mi correo es: pinkii1811@gmail.com

    ResponderEliminar
  23. hola si pudieras mandarme el codigo fuente del archivo dll te lo agradeceria mucho mi correo es delmoral18@hotmail.com

    ResponderEliminar
  24. Hola podrías enviarme por favor el código de la dll del curp a mi correo, por favor? vallejo_alonso@hotmail.com

    Saludos!!!

    ResponderEliminar
  25. como le ago para hacerlo pero en una aplicacion web??

    ResponderEliminar
    Respuestas
    1. TE PROPORCIONO EL CODIGO...

      <<<<<<<<<<<<<>>>>>>>>>>>>>>

      Imports CURPLib

      Partial Class Default2
      Inherits System.Web.UI.Page

      Private SEXO As Char

      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

      End Sub

      Private Function ObtieneSexo() As String
      If CheckBox1.Checked Then
      SEXO = "H"c
      ElseIf CheckBox2.Checked Then
      SEXO = "M"c
      Else
      SEXO = "X"c
      End If
      Return SEXO.ToString()
      End Function

      Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

      If String.IsNullOrEmpty(DropDownList1.SelectedValue) OrElse ObtieneSexo().Equals("X") OrElse String.IsNullOrEmpty(ApellidoPaterno.Text) OrElse String.IsNullOrEmpty(Nombre.Text) Then

      Else
      Dim calculacurp As New CURPLib.CURPLib()
      Curp.Text = calculacurp.CURPCompleta(ApellidoPaterno.Text, ApellidoMaterno.Text, Nombre.Text, FechaNacimiento.Text, ObtieneSexo(), DropDownList1.SelectedValue)

      End If
      End Sub
      End Class

      Eliminar
  26. como puedo poner el codigo fuente en mi blog ?

    ResponderEliminar
  27. Tendras la dll, mi correo es gherlop.ags@gmail.com

    ResponderEliminar
  28. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  29. Excelente Aporte, Tengo algunos problemas cuando el nombre es Maria o Jose, y cuando los apellidos comienzan con GUI, por ejemplo me da GUIAC370220HCSLGR04 y deberia ser GUAC370220HCSLGR04 o bien GUAC370220HCSLGR07, ¿como puedo solicionar esto? Gracias.

    ResponderEliminar
  30. Hola, Existe un webservice para traer del SAT los datos de un contribuyente proporcionando su RFC?

    Gracias

    ResponderEliminar
  31. Me podrían pasar el algoritmo para calcular la homoclave (digitos 17-18) de la CURP.

    Me urge para un desarrollo en mi trabajo. O como solicitarla en RENAPO

    Mi correo es: ing.tic.angelplascencia@gmail.com

    De ya, agradecido. Saludos cordiales

    ResponderEliminar
  32. me podrias ayudar con tu .dll por favor..
    mi correo berna_crouze@hotmail.com

    ResponderEliminar
  33. http://lasmemoriasdelprogramador.blogspot.mx/2015/07/biblioteca-de-clase-net-para-generar-el.html

    ResponderEliminar
  34. Armando Rosales Maza, te falta calcular el DV.
    Saludos.

    ResponderEliminar
  35. Excelente trabajo, crees que me puedas ayudar con un digito verificador E muy similar al de la curp, yo te mando material y todo para que lo analices y ya vemos como podemos ayudarnos mutuamente o te pago o tu me dices, por favor contacteme whatsapp +526141160598

    ResponderEliminar
  36. Hola Bers... que tal? tendrias la fuente de como calcular el RFC para personas morales y ese famosa libreria para el calculo de la actual homoclave para registrados del nuevo siglo:
    mi correo militothecharle53@hotmail.com

    ResponderEliminar
  37. Me podra enviar el codigo de la dll mi correo es ovalleenrique044@gmail.com, gracias por el aporte :)

    ResponderEliminar
  38. me puedes pasar el codigo mi correo es vargasdaniel999@gmail.com gracias

    ResponderEliminar
  39. Lo probe con mi nombre y pues no funciono

    ResponderEliminar
  40. Podrías mandarme el código a mi correo por favor, me servirá mucho.
    jalex8707@gmail.com

    ResponderEliminar
  41. puedes enviarlo a mi correo porfa zavdielalanis28@gmail.com

    ResponderEliminar
  42. Hola bers...me podrias ayudar enviandome tu dll, mi correo es cesar23carranza@gmail.com gracias.

    ResponderEliminar