En este articulo me gustaria hablar acerca de como generar la clave unica de registro de poblacion o CURP con Visual Studio y C#

Que es la CURP?

Podemos definirla como un mecanismo que permite registrar en forma individual a todas las personas que residen en el territorio nacional, así como a los mexicanos que radican en el extranjero.

Como se genera la CURP?

Se genera  a partir de los datos básicos de la persona como son nombre(s), apellido paterno, apellido materno, sexo, fecha y lugar de nacimiento,que se encuentran en el acta de nacimiento, documento migratorio, carta de naturalización o certificado de nacionalidad mexicana.

Estructura y criterios para generar la CURP

La clave tiene una longitud de 18 caracteres y es de  composicion  alfanumérica (combina números y letras) acontinuacion podranver como es generada la CURP a partir de los datos antes descritos en las figuras 1.0 y 1.1.

Figura 1.0. Figura 1.1.

Como podran observar los ultimos dos digitos de la clave CURP son generados por la secretaria de gobernacion por lo cual este programa solo genera los primeros 16 digitos.

Codificacion

A continuacion presento el codigo para el programa el cual consta de varios metodos y una clase con la cual el programa puede verificar si la fecha fue introducida de forma correcta o no.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace App_CURP
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int estado = 0;
private int genero = 0;
private string EntidadFederativa = string.Empty;
private char GeneroSolicitante;
private char PL_PApellido;
private char PV_PApellido;
private char PL_SApellido;
private char PL_Nombre;
private char PC_PApellido;
private char PC_SApellido;
private char PC_Nombre;
private string dia = string.Empty;
private string mes = string.Empty;
private string año = string.Empty;
private string CURP = string.Empty;

public void Posicion_5_10(string fecha)
{
int barrido = 0;
int contador = 0;
char verificador;
char[] DofB = fecha.ToCharArray();
int longitud = DofB.Length;
while (barrido < longitud)
{
verificador = DofB[barrido];
if (verificador == ‘/’)
{
contador++;
}
else if (contador == 0 && verificador != ‘/’)
{
dia = dia + DofB[barrido];
}
else if (contador == 1 && verificador != ‘/’)
{
mes = mes + DofB[barrido];
}
else if ((contador == 2 && verificador != ‘/’) && (barrido == 8 || barrido == 9))
{
año = año + DofB[barrido];
}
barrido++;
}
}
public void Posición_1_4_14_16(string nombre, string primer_apellido, string segundo_apellido)
{
char[] name = nombre.ToCharArray();
char[] Lastname1 = primer_apellido.ToCharArray();
char[] Lastname2 = segundo_apellido.ToCharArray();
int lenght1 = name.Length;
int lenght2 = Lastname1.Length;
int lenght3 = Lastname2.Length;
bool vocal = false;
bool consonante_1 = false;
bool consonante_2 = false;
bool consonante_3 = false;
for (int i = 0; i < lenght2; i++)
{
//La letra inicial del primer apellido
if (i == 0)
{
PL_PApellido = Lastname1[i];
}
//La primera vocal interna del primer apellido (a,e,i,o,u)
else if (Lastname1[i] == ‘A’ && vocal == false)
{
PV_PApellido = Lastname1[i];
vocal = true;
}
else if (Lastname1[i] == ‘E’ && vocal == false)
{
PV_PApellido = Lastname1[i];
vocal = true;
}
else if (Lastname1[i] == ‘I’ && vocal == false)
{
PV_PApellido = Lastname1[i];
vocal = true;
}
else if (Lastname1[i] == ‘O’ && vocal == false)
{
PV_PApellido = Lastname1[i];
vocal = true;
}
else if (Lastname1[i] == ‘U’ && vocal == false)
{
PV_PApellido = Lastname1[i];
vocal = true;
}
/*******La primera consonante del primer apellido******/
else if (Lastname1[i] == ‘B’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘C’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘D’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘F’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘G’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘H’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘J’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘K’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘L’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘M’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘N’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘P’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘Q’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘R’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘S’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘T’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘V’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘X’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘Y’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
else if (Lastname1[i] == ‘Z’ && consonante_1 == false)
{
PC_PApellido = Lastname1[i];
consonante_1 = true;
}
}
/******La letra inicial del segundo apellido******/
for (int k = 0; k < lenght3; k++)
{
if (k == 0)
{
PL_SApellido = Lastname2[k];
}
/*******La primera consonante del segundo apellido******/
else if (Lastname2[k] == ‘B’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘C’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘D’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘F’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘G’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘H’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘J’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘K’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘L’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘M’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘N’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘P’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘Q’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘R’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘S’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘T’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘V’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘X’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘Y’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
else if (Lastname2[k] == ‘Z’ && consonante_2 == false)
{
PC_SApellido = Lastname2[k];
consonante_2 = true;
}
}
/******La letra inicial del nombre******/
for (int j = 0; j < lenght1; j++)
{
if (j == 0)
{
PL_Nombre = name[j];
}
/*******La primera consonante del segundo apellido******/
else if (name[j] == ‘B’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘C’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘D’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘F’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘G’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘H’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘J’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘K’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘L’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘M’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘N’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘P’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘Q’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘R’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘S’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘T’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘V’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘W’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘X’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘Y’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
else if (name[j] == ‘Z’ && consonante_3 == false)
{
PC_Nombre = name[j];
consonante_3 = true;
}
}
}
private void btnCURP_Click(object sender, EventArgs e)
{
if (txtN1.Text.Length == 0)
{
MessageBox.Show(“Debes introducir tu nombre”, “Error Critico”, MessageBoxButtons.OK, MessageBoxIcon.Error);

}
if (txtAP.Text.Length == 0)
{
MessageBox.Show(“Debes introducir tu Apellido Paterno”, “Error Critico”, MessageBoxButtons.OK, MessageBoxIcon.Error);

}
if (txtAM.Text.Length == 0)
{
MessageBox.Show(“Debes introducir tu Apellido Materno”, “Error Critico”, MessageBoxButtons.OK, MessageBoxIcon.Error);

}
else
{
string fecha = mTxtFecha.Text;
string nombre = txtN1.Text;
string ApellidoPaterno = txtAP.Text;
string ApellidoMaterno = txtAM.Text;
RegEx verificar = new RegEx();
bool resultado = verificar.Verificar_Fecha(fecha);
if (resultado == true)
{
Posición_1_4_14_16(nombre, ApellidoPaterno, ApellidoMaterno);
Posicion_5_10(fecha);
CURP = CURP + PL_PApellido + PV_PApellido + PL_SApellido + PL_Nombre + año + mes + dia + GeneroSolicitante + EntidadFederativa + PC_PApellido + PC_SApellido + PC_Nombre;
txtCURP.Text = CURP;
}
else
MessageBox.Show(“Fecha Invalida”, “Error Critico”,MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void cmbEstados_SelectedIndexChanged(object sender, EventArgs e)
{

estado = cmbEstados.SelectedIndex + 1;
switch (estado)
{
//AGUASCALIENTES
case 1:
EntidadFederativa = “AS”;
break;
//BAJA CALIFORNIA
case 2:
EntidadFederativa = “BC”;
break;
//BAJA CALIFORNIA SUR
case 3:
EntidadFederativa = “BS”;
break;
//CAMPECHE
case 4:
EntidadFederativa = “CC”;
break;
//COAHUILA
case 5:
EntidadFederativa = “CL”;
break;
//COLIMA
case 6:
EntidadFederativa = “CM”;
break;
//CHIAPAS
case 7:
EntidadFederativa = “CS”;
break;
//CHIHUAHUA
case 8:
EntidadFederativa = “CH”;
break;
//DISTRITO FEDERAL
case 9:
EntidadFederativa = “DF”;
break;
//DURANGO
case 10:
EntidadFederativa = “DG”;
break;
//GUANAJUATO
case 11:
EntidadFederativa = “GT”;
break;
//GUERRERO
case 12:
EntidadFederativa = “GR”;
break;
//HIDALGO
case 13:
EntidadFederativa = “HG”;
break;
//JALISCO
case 14:
EntidadFederativa = “JC”;
break;
//MEXICO
case 15:
EntidadFederativa = “MC”;
break;
//MICHOACAN
case 16:
EntidadFederativa = “MN”;
break;
//MORELOS
case 17:
EntidadFederativa = “MS”;
break;
//NAYARIT
case 18:
EntidadFederativa = “NT”;
break;
//NUEVO LEON
case 19:
EntidadFederativa = “NL”;
break;
//OAXACA
case 20:
EntidadFederativa = “OC”;
break;
//PUEBLA
case 21:
EntidadFederativa = “PL”;
break;
//QUERETARO
case 22:
EntidadFederativa = “QT”;
break;
//QUINTANA ROO
case 23:
EntidadFederativa = “QR”;
break;
//SAN LUIS POTOSI
case 24:
EntidadFederativa = “SP”;
break;
//SINALOA
case 25:
EntidadFederativa = “SL”;
break;
//SONORA
case 26:
EntidadFederativa = “SR”;
break;
//QUINTANA ROO
case 27:
EntidadFederativa = “QR”;
break;
//TABASCO
case 28:
EntidadFederativa = “TC”;
break;
//TAMAULIPAS
case 29:
EntidadFederativa = “TS”;
break;
//TLAXCALA
case 30:
EntidadFederativa = “TL”;
break;
//VERACRUZ
case 31:
EntidadFederativa = “VZ”;
break;
//YUATAN
case 32:
EntidadFederativa = “YN”;
break;
//ZACATECAS
default:
EntidadFederativa = “ZS”;
break;
}
}

private void cmbGenero_SelectedIndexChanged(object sender, EventArgs e)
{
genero = cmbGenero.SelectedIndex + 1;
switch (genero)
{
case 1:
GeneroSolicitante = ‘H’;
break;
default:
GeneroSolicitante = ‘M’;
break;
}
}
}
}

Este el codigo de la clase.

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace App_CURP
{
class RegEx
{
private Regex date;

public bool Verificar_Fecha(string fecha)
{
date = new Regex(“\\d{2}/\\d{2}/\\d{4}”);
Match verificar;
verificar = date.Match(fecha);
if (verificar.Success)
return true;
else
return false;
}
}
}

 Resultados del Programa

A hora verificaremos el correcto funcionamiento de nuestro programa mediante el siguiente ejemplo:

Nombre: Concepción.

Apellido Paterno y Materno: Salgado Briseño.

Genero: mujer.

Fecha de Naciemiento:  26 de junio de 1956.

Lugar de Nacimiento: México, Distrito Federal.

CURP: SABC560626MDFLRN09

Despues de insertar los datos en el programa deberas de obtener la CURP claro sin los ultimos dos digitos “09” como puede ver en la figura 1.3.

Figura 1.3.

Bibliografia

1.- Instructivo normativo para la asignación de la clave única de registro de población http://www.amsnogales.com.mx/DocumentosPagin/CapSemE12011 1011172426.pdf recuperado:5 de Octubre del 2011.