Foros del Web » Programación para mayores de 30 ;) » .NET »

C Sharp Generador de CURP validado Parte 1

Estas en el tema de C Sharp Generador de CURP validado Parte 1 en el foro de .NET en Foros del Web. Funciona con C Sharp 2010. Consideraciones: -Esta clase genera 16 de los 18 dígitos del CURP de una persona. (Los caracteres 17 y 18 corresponden ...
  #1 (permalink)  
Antiguo 19/01/2012, 03:10
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
C Sharp Generador de CURP validado Parte 1

Funciona con C Sharp 2010.

Consideraciones:
-Esta clase genera 16 de los 18 dígitos del CURP de una persona.
(Los caracteres 17 y 18 corresponden al Diferenciador de Homonimia y al Dígito Verificador respectivamente, y solamente podran ser asignados por la Secretaría de Gobernación a través de sus bases de datos, les recomiendo no perder tiempo en saber como generarlos, puesto que no son bases de datos de consulta libre.)
-Está validada según el documento "INSTRUCTIVO NORMATIVO PARA LA ASIGNACIÓN DE LA CLAVE ÚNICA DEREGISTRO DE POBLACIÓN" emitido por la SEGOB y que podrán consultar en la siguiente dirección:
[URL="http://www.gobernacion.gob.mx/work/models/SEGOB/Resource/231/1/images/InstructivoParaLaCurp_v2008.pdf"]http://www.gobernacion.gob.mx/work/models/SEGOB/Resource/231/1/images/InstructivoParaLaCurp_v2008.pdf[/URL]

Como usarlo:
1. Primero genera una clase y ponle por nombre "CURP.h"
2. Copia y pega todo lo que está dentro de los corchetes de "class CURP"
(El codigo de la clase "CURP.h" está en otro tema que llamé "C Sharp Generador de CURP validado Parte 2")

3. En el Form de tu programa, coloca un control Button y un TextBox, en mi caso yo los llame btnGenCURP y tbxCURP respectivamente

4. En el Evento CLICK de tu botón prueba colocando el codigo que te muestro y verifica que genere el siguiente resultado:

MAML801012MSRRRP (los datos que puse para obtener este resultado son inventados)

Código:
private void btnGenCURP_Click(object sender, EventArgs e)
        {
            CURP Calcula = new CURP();
            tbxCURP.Text = Calcula.GeneraCURP("MARÍA JOSÉ", "MARTÍNEZ", "LÓPEZ", "12/10/1980", false, "SONORA");
        }
5. Podrás sustituir los datos que yo puse por controles que tú designes para ingresar información.

6. La función "GeneraCURP" solicitará como parámetros lo siguiente:
- Nombre: Podrá ser en mayúsculas, minúsculas o contener acentos, tu ponlo tal y como se escribe, la función se encarga de validarlo y adecuarlo.
- 1er. Apellido: Podrá ser en mayúsculas, minúsculas o contener acentos, tu ponlo tal y como se escribe, la función se encarga de validarlo y adecuarlo.
- 2do. APellido: Podrá ser en mayúsculas, minúsculas o contener acentos, tu ponlo tal y como se escribe, la función se encarga de validarlo y adecuarlo. (hay personas que solo tienen un apellido, la función esta preparada para ello, si no tiene algún apellido, envíale una cadena vacía ("")). Las mujeres deberán usar su apellido de soltera.
- Fecha de Nacimiento: Deberá tener formato dd/mm/aaaa. (ejemplo: 21/12/2000), la función revisa si la fecha proporcionada es válida.
- Sexo: Asignale "true" para Hombre y "false" para Mujer. (Revisa el ejemplo de arriba)
- Estado: Podrás mandar el nombre del estado o su número correspondiente. Podrá ser en mayúsculas, minúsculas o contener acentos, la función se encarga de validarlo y adecuarlo. (Para referencia localiza en el archivo de clase "CURP.h" la función llamada "public string SiglasEstado(string Estado)", alli podrás ver como nombrar a los estados)

7. Si por alguna razón enviaras mal algún parámetro, el CURP generado por la función contendrá en una o varias posiciones el simbolo "#".

Las posiciones corresponden de izquierda a derecha a:
1. 1er. Apellido-Letra Inicial.
2. 1er. Apellido-Primera Vocal Interna.
3. 2do. Apellido-Letra Inicial.
4. Nombre-Letra Inicial.
5. Año-Dígito más representativo.
6. Año-Dígito menos representativo.
7. Mes-Dígito más representativo.
8. Mes-Dígito menos representativo.
9. Día-Dígito más representativo.
10. Día-Dígito menos representativo.
11. Sexo-H ó M.
12. Siglas Estado Nacimiento-Según catálogo.
13. Siglas Estado Nacimiento-Según catálogo.
14. 1er. Apellido-Primera consonante interna.
15. 2do. Apellido-Primera consonante interna.
16. Nombre-Primera consonante interna.
17. Diferenciador de Homonimia asignado por SEGOB. (no se genera aquí)
18. Dígito verificador generado x algoritmo por SEGOB. (no se genera aquí)

Espero les sirva tanto como a mí.
Si notas alguna falla coméntamela porfavor.
Saludos Chavos....
Atte. Sabueso.
  #2 (permalink)  
Antiguo 19/01/2012, 03:14
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: C Sharp Generador de CURP validado Parte 1

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OBERON_12
{
    class CURP
    {
        public string GeneraCURP(string PrimerApellido, string SegundoApellido, string Nombres, string FechaNacimientoDMY, Boolean EsHombre, string EstadoNacimiento)
        {
//Declaración de variables.
            string Ap1 = PrimerApellido;
            string Ap2 = SegundoApellido;
            string Nom = Nombres;
            string FNac = FechaNacimientoDMY;
            string ENac = EstadoNacimiento;
            System.Text.StringBuilder CURP = new System.Text.StringBuilder("################");
            string Temp = "";
//Removemos cadenas que contienen solo caracteres vacios.
            Ap1 = Ap1.Trim();
            Ap2 = Ap2.Trim();
            Nom = Nom.Trim();
            ENac = ENac.Trim();
//Convertimos el texto a mayúsculas.
            Ap1 = Ap1.ToUpper();
            Ap2 = Ap2.ToUpper();
            Nom = Nom.ToUpper();
            ENac = ENac.ToUpper();
//Removemos acentos, diéresis, etc.
            Ap1 = RemoverSignosAcentos(Ap1);
            Ap2 = RemoverSignosAcentos(Ap2);
            Nom = RemoverSignosAcentos(Nom);
            ENac = RemoverSignosAcentos(ENac);
//Validamos que la informacion presentada sea correcta.
//Validaciones para Apellidos.
            if ((Ap1.Length > 0) || (Ap2.Length > 0))
            {   
                if ((Ap1.Length==0) && (Ap2.Length!=0))
                {
                    Ap1 = Ap2;
                    Ap2 = "";
                }
                if (EsCompuesto(Ap1))
                    Ap1 = RemoverPalabras(Ap1, false);
                CURP[0] = PrimerLetra(Ap1);
                CURP[1] = PrimerVocal(Ap1, 1);
                CURP[13] = PrimerConsonante(Ap1, 1);

                if (EsCompuesto(Ap2))
                    Ap2 = RemoverPalabras(Ap2, false);
                CURP[2] = PrimerLetra(Ap2);
                CURP[14] = PrimerConsonante(Ap2, 1);
            }
//Validaciones  y cálculo para el Nombre.
            if (Nom.Length != 0)
            {
                if (EsCompuesto(Nom))            
                    Nom = RemoverPalabras(Nom, true);
                CURP[3] = PrimerLetra(Nom);
                CURP[15] = PrimerConsonante(Nom, 1);
            }
//Validaciones  y cálculo para la FECHA DE NACIMIENTO.
            if (VerificaFecha(FNac))
            {
                Temp = FechaCortaYMD(FNac);
                for (int i = 0; i < 6; i++)
                {
                    CURP[i + 4] = Temp[i];
                }
            }
//Validaciones y cálculo para SEXO.
            if (EsHombre)
                CURP[10] = 'H';
            else
                CURP[10] = 'M';
//Validaciones y cálculo para SIGLAS DE ESTADO.
            Temp = SiglasEstado(ENac);
            CURP[11] = Temp[0];
            CURP[12] = Temp[1];
//Valida si es Palabra Inconveniente.
            Temp = "" + CURP[0] + CURP[1] + CURP[2] + CURP[3];
            if (EsPalabraInapropiada(Temp))
                CURP[1] = 'X';
//El resultado esta listo.
        return CURP.ToString();
        }

        public char PrimerLetra(string Palabra)
        {
            char Ppn = ' ';
            if (Palabra.Length == 0)
                Ppn = 'X';
            else
                if ((Palabra[0] == 'Ñ') || !(char.IsLetter(Palabra[0])))
                    Ppn = 'X';
                else
                    Ppn = Palabra[0];
            return Ppn;
        }

        public char PrimerVocal(string Palabra, int PosicionInicial)
        {
            char Vocal = ' ';
            if ((Palabra.Length-1) >= PosicionInicial)
            {
                for (int B = PosicionInicial; B < Palabra.Length; B++)
                {
                    if (Palabra[B] == 'A' || Palabra[B] == 'E' || Palabra[B] == 'I' || Palabra[B] == 'O' || Palabra[B] == 'U')
                    {
                        Vocal = Palabra[B];
                        break;
                    }
                }
            }
            if ((Vocal == ' ') || (Vocal == 'Ñ') || !(char.IsLetter(Vocal)))
                Vocal = 'X';
            return Vocal;
        }

        public char PrimerConsonante(string Palabra, int PosicionInicial)
        {
            char Consonante = ' ';

            if ((Palabra.Length-1) >= PosicionInicial)
            {
                for (int B = PosicionInicial; B < Palabra.Length; B++)
                {
                    if (Palabra[B] != 'A' && Palabra[B] != 'E' && Palabra[B] != 'I' && Palabra[B] != 'O' && Palabra[B] != 'U')
                    {
                        Consonante = Palabra[B];
                        break;
                    }
                }
            }
            if ((Consonante == ' ') || (Consonante == 'Ñ') || !(char.IsLetter(Consonante)))
                Consonante = 'X';
            return Consonante;
        }

        public static string RemoverPalabras(string Texto, Boolean EsNombre)
        {
            Boolean Concordancia = false;
            string s = Texto;
            string[] Words = s.Split(' ');
            string[] PCC = { "DA", "DAS", "DE", "DEL", "DER", "DI", "DIE", "DD", "EL", "LA", "LOS", "LAS", "LE", "LES", "MAC", "MC", "VAN", "VON", "Y" };
            string[] PCCN = { "MARIA", "MA.", "MA", "JOSE", "J", "J." };
            s = "";
            foreach (string xWords in Words)
            {
                Concordancia = false;
                foreach (string xPCC in PCC)
                {
                    if (xWords == xPCC)
                    {
                        Concordancia = true;
                        break;
                    }
                }
                if (!Concordancia)
                    s += xWords + " ";
            }
            s = s.Trim();
            if (EsNombre && EsCompuesto(s))
            {
                string[] WordsN = s.Split(' ');
                Boolean Concordado = false;
                s = "";
                foreach (string xWords in WordsN)
                {
                    Concordancia = false;
                    if (!Concordado)
                    {
                        foreach (string xPCCN in PCCN)
                        {
                            if (xWords == xPCCN)
                            {
                                Concordancia = true;
                                Concordado = true;
                                break;
                            }
                        }
                    }
                    if (!Concordancia)
                        s += xWords + " ";
                }
            }
            return s.Trim();
        }

        public static Boolean EsCompuesto(string Texto)
        {
            string s = Texto;
            string[] words = s.Split(' ');
            if (words.Length > 1)
                return true;
            else
                return false;
        }
(Continua mas abajo....)
  #3 (permalink)  
Antiguo 19/01/2012, 03:18
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: C Sharp Generador de CURP validado Parte 1

Código:
        public static string RemoverSignosAcentos(string Texto)
        {
            string ConSignos = "áàäéèëíìïóòöúùuÁÀÄÉÈËÍÌÏÓÒÖÚÙÜçÇ";
            string SinSignos = "aaaeeeiiiooouuuAAAEEEIIIOOOUUUcC";
            var textoSinAcentos = string.Empty;

            foreach (var caracter in Texto)
            {
                var indexConAcento = ConSignos.IndexOf(caracter);
                if (indexConAcento > -1)
                    textoSinAcentos = textoSinAcentos + (SinSignos.Substring(indexConAcento, 1));
                else
                    textoSinAcentos = textoSinAcentos + (caracter);
            }
            return textoSinAcentos;
        }

        public string SiglasEstado(string Estado)
        {
            string Siglas=null;
            switch (Estado)
            {
                case "AGUASCALIENTES":
                case "01":
                case "1":
                    Siglas="AS";
                    break;
                case "BAJA CALIFORNIA": 
                case "02":
                case "2":
                    Siglas="BC";
                    break;
                case "BAJA CALIFORNIA SUR": 
                case "03":
                case "3":
                    Siglas="BS";
                    break;
                case "CAMPECHE":  
                case "04":
                case "4":
                    Siglas="CC";
                    break;
                case "COAHUILA": 
                case "05":
                case "5":
                    Siglas="CL";
                    break;
                case "COLIMA": 
                case "06":
                case "6":
                    Siglas="CM";
                    break;
                case "CHIAPAS": 
                case "07":
                case "7":
                    Siglas="CS";
                    break;
                case "CHIHUAHUA": 
                case "08":
                case "8":
                    Siglas="CH";
                    break;
                case "DISTRITO FEDERAL": 
                case "09":
                case "9":
                    Siglas="DF";
                    break;
                case "DURANGO":
                case "10":
                    Siglas="DG";
                    break;
                case "GUANAJUATO":
                case "11":
                    Siglas="GT";
                    break;
                case "GUERRERO":
                case "12":
                    Siglas="GR";
                    break;
                case "HIDALGO":
                case "13":
                    Siglas="HG";
                    break;
                case "JALISCO":
                case "14":
                    Siglas="JC";
                    break;
                case "MEXICO":
                case "15":
                    Siglas="MC";
                    break;
                case "MICHOACAN":
                case "16":
                    Siglas="MN";
                    break;
                case "MORELOS":
                case "17":
                    Siglas="MS";
                    break;
                case "NAYARIT":
                case "18":
                    Siglas="NT";
                    break;
                case "NUEVO LEON":
                case "19":
                    Siglas="NL";
                    break;
                case "OAXACA":
                case "20":
                    Siglas="OC";
                    break;
                case "PUEBLA":
                case "21":
                    Siglas="PL";
                    break;
                case "QUERETARO":
                case "22":
                    Siglas="QT";
                    break;
                case "QUINTANA ROO":
                case "23":
                    Siglas="QR";
                    break;
                case "SAN LUIS POTOSI":
                case "24":
                    Siglas="SP";
                    break;
                case "SINALOA":
                case "25":
                    Siglas="SL";
                    break;
                case "SONORA":
                case "26":
                    Siglas="SR";
                    break;
                case "TABASCO":
                case "27":
                    Siglas="TC";
                    break;
                case "TAMAULIPAS":
                case "28":
                    Siglas="TS";
                    break;
                case "TLAXCALA":
                case "29":
                    Siglas="TL";
                    break;
                case "VERACRUZ":
                case "30":
                    Siglas="VZ";
                    break;
                case "YUCATAN":
                case "31":
                    Siglas="YN";
                    break;
                case "ZACATECAS":
                case "32":
                    Siglas="ZS";
                    break;
                case "NACIDO EXTRANJERO":
                case "33":
                    Siglas = "NE";
                    break;
                default:
                    Siglas = "##";
                    break;
            }
            return Siglas;
        }

        public bool VerificaFecha(object inValue)
        {
            bool bValid;
            try
            {
                DateTime myDT = DateTime.Parse(inValue.ToString());
                bValid = true;
            }
            catch (Exception e)
            {
                bValid = false;
            }
            return bValid;
        }

        public string FechaCortaYMD(string FechaLargaDMY)
        {
            string YMD = "";
            if (FechaLargaDMY.Length == 10)
            {
                String Y = FechaLargaDMY.Substring(8, 2);
                String M = FechaLargaDMY.Substring(3, 2);
                String D = FechaLargaDMY.Substring(0, 2);
                YMD = Y + M + D;
            }
            return YMD;
        }

        public Boolean EsPalabraInapropiada(string Texto)
        {
            Boolean Concordancia = false;
            string [] Maja= { "BACA", "LOCO", "BAKA", "LOKA", "BUEI", "LOKO", "BUEY", "MAME", "CACA", "MAMO", "CACO", "MEAR", 
                            "CAGA", "MEAS", "CAGO", "MEON", "CAKA", "MIAR", "CAKO", "MION", "COGE", "MOCO", "COGI", "MOKO",
                            "COJA", "MULA", "COJE", "MULO", "COJI", "NACA,", "COJO", "NACO", "COLA", "PEDA", "CULO", "PEDO",
                            "FALO", "PENE", "FETO", "PIPI", "GETA", "PITO", "GUEI", "POPO", "GUEY", "PUTA", "JETA", "PUTO",
                            "JOTO", "QULO", "KACA", "RATA", "KACO", "ROBA", "KAGA", "ROBE", "KAGO", "ROBO", "KAKA", "RUIN",
                            "KAKO", "SENO", "KOGE", "TETA", "KOGI", "VACA", "KOJA", "VAGA", "KOJE", "VAGO", "KOJI", "VAKA",
                            "KOJO", "VUEI", "KOLA", "VUEY", "KULO", "WUEI", "LILO", "WUEY", "LOCA "};
            foreach (string xMaja in Maja)
            {
                if (Texto == xMaja)
                {
                    Concordancia = true;
                    break;
                }
            }
            return Concordancia;
        }
    }
}
(Sólo Pega ambas partes de la Clase)
Ya no generé el Tema "C Sharp Generador de CURP validado Parte 2", mejor lo hice de esta manera.
Saludos...

Etiquetas: csharp, curp, genera
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:10.