Está en la página 1de 4

import re

from datetime import datetime

def obtener_clave_estado(estado):

estados = {

"Aguascalientes": "AS",

"Baja California": "BC",

"Baja California Sur": "BS",

"Campeche": "CC",

"Coahuila": "CL",

"Colima": "CM",

"Chiapas": "CS",

"Chihuahua": "CH",

"Distrito Federal": "DF",

"Durango": "DG",

"Guanajuato": "GT",

"Guerrero": "GR",

"Hidalgo": "HG",

"Jalisco": "JC",

"México": "MC",

"Michoacán": "MN",

"Morelos": "MS",

"Nayarit": "NT",

"Nuevo León": "NL",

"Oaxaca": "OC",

"Puebla": "PL",

"Querétaro": "QT",

"Quintana Roo": "QR",

"San Luis Potosí": "SP",


"Sinaloa": "SL",

"Sonora": "SR",

"Tabasco": "TC",

"Tamaulipas": "TS",

"Tlaxcala": "TL",

"Veracruz": "VZ",

"Yucatán": "YN",

"Zacatecas": "ZS"

return estados.get(estado, "")

def validar_fecha(fecha):

try:

datetime.strptime(fecha, "%d/%m/%Y")

return True

except ValueError:

return False

def validar_caracteres(texto):

return bool(re.match("^[A-Za-z\s]+$", texto))

def generar_curp(nombre, apellido_paterno, apellido_materno, fecha_nacimiento, estado):

# Validar nombres compuestos

nombres = nombre.split()

apellido_paterno = apellido_paterno.replace("Ñ", "X")

if len(nombres) > 1:

primer_nombre = nombres[0]
segundo_nombre = nombres[1]

else:

primer_nombre = nombres[0]

segundo_nombre = "X"

# Obtener clave del estado

clave_estado = obtener_clave_estado(estado)

# Validar fecha de nacimiento

if not validar_fecha(fecha_nacimiento):

return "Fecha de nacimiento inválida"

# Validar caracteres

if not validar_caracteres(primer_nombre) or not validar_caracteres(apellido_paterno) or not


validar_caracteres(apellido_materno):

return "Los nombres y apellidos solo pueden contener letras"

# Generar CURP

curp = (

apellido_paterno[:1].upper() +

apellido_paterno[1:3].upper() +

apellido_materno[:1].upper() +

primer_nombre[:1].upper() +

fecha_nacimiento[8:10] +

fecha_nacimiento[3:5] +

fecha_nacimiento[0:2] +

obtener_clave_estado(estado)

)
return curp

# Pedir datos al usuario

nombre = input("Ingrese su nombre(s): ")

apellido_paterno = input("Ingrese su apellido paterno: ")

apellido_materno = input("Ingrese su apellido materno: ")

fecha_nacimiento = input("Ingrese su fecha de nacimiento (dd/mm/aaaa): ")

estado = input

JOSE ANTONIO IRINEO DOMINGUEZ

También podría gustarte