{"id":28323412,"url":"https://github.com/sanjacob/curp","last_synced_at":"2025-06-24T00:31:05.455Z","repository":{"id":290351941,"uuid":"962478325","full_name":"sanjacob/curp","owner":"sanjacob","description":"Librería de C para validación, análisis, y construcción de la CURP Mexicana","archived":false,"fork":false,"pushed_at":"2025-04-28T12:01:43.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-17T14:11:31.046Z","etag":null,"topics":["curp","datos","mexico","renapo"],"latest_commit_sha":null,"homepage":"https://curp.readthedocs.org","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sanjacob.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-08T08:06:26.000Z","updated_at":"2025-04-28T12:01:46.000Z","dependencies_parsed_at":"2025-04-28T11:33:32.467Z","dependency_job_id":"e0d5d26c-257e-4ed9-af06-1d531974395c","html_url":"https://github.com/sanjacob/curp","commit_stats":null,"previous_names":["sanjacob/curp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sanjacob/curp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanjacob%2Fcurp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanjacob%2Fcurp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanjacob%2Fcurp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanjacob%2Fcurp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sanjacob","download_url":"https://codeload.github.com/sanjacob/curp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanjacob%2Fcurp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261582545,"owners_count":23180610,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curp","datos","mexico","renapo"],"created_at":"2025-05-25T15:12:13.796Z","updated_at":"2025-06-24T00:31:05.449Z","avatar_url":"https://github.com/sanjacob.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# curp\n\nLa primera y única librería de C para la validación y extracción de datos\nde la CURP (Clave Única de Registro de Población) Mexicana.\n\nEsta librería esta optimizada para **velocidad** y **eficiencia**, es\nperfecta para aplicaciones de datos masivos, o plataformas que cuentan\ncon recursos de procesamiento y memoria limitados.\n\n- Valida datos de millones de usuarios en segundos\n- Minería de datos como la edad y entidad federativa de nacimiento\n- Integración en desarrollo móvil, IoT, y wearables\n- Ahorra en costos y tiempo de procesamiento en la nube\n\nAlgunos casos de uso específicos:\n\n- Lector portátil de credencial de elector.\n- Validación de CURP integrada en aplicación móvil.\n- Restringir registro a personas por fecha de nacimiento.\n- Analizar distribución de usuarios por entidad federativa.\n- Sanitización de base de datos con millones de filas.\n\n\n## Validación\n\nLa librería hace una validación completa de la CURP y sus componentes,\ncubriendo casos específicos que muchas otras librerías no cubren, sin\nsacrificar rendimiento.\n\n- Formato alfabético/numérico de los carácteres\n- Vocal del primer apellido y consonantes\n- Palabras altisonantes (NXCO, MXCO, etc.)\n- Sexo y entidad federativa de nacimiento\n- Fecha de nacimiento (meses con 30/31 días, años bisiestos)\n\n\u003c!--Además, si cuentas con el nombre de la persona:\n\n- Comprueba si la CURP es correcta para un nombre o apellido\n- Separa un nombre completo en nombre y apellidos usando la CURP--\u003e\n\n\n| Librería           | Formato  | Altisonantes | Años bisiestos | Extracción |\n|--------------------|----------|--------------|----------------|------------|\n| **`curp.h`**       | ✅       | ✅           | ✅             | ✅         |\n| `CURPSuite.py`     | ✅       | ✅           | ✅             | ✅         |\n| `stdnum.py`        | ❌       | ✅           | ✅             | ➖         |\n| `mexa.py`          | ❌       | ✅           | ✅             | ✅         |\n| `ripper2hl/curp.js`| ✅       | ❌           | ❌             | ❌         |\n\n\n## Ejemplo\n\n```c\n#include \u003cstdio.h\u003e\n#include \u003ccurp.h\u003e\n\nint main(int argc, char* argv[])\n{\n    struct curp p;\n    int r;\n\n    /* Es necesario inicializar la librería */\n    if (!curp_init()) {\n        printf(\"no se pudo inicializar curp.h\");\n        return 1;\n    }\n\n    /* Validación simple de la CURP */\n    r = curp_validar(\"SABC560626MDFLRN09\", NULL);\n\n    /* Valida y extrae propiedades de una CURP */\n    if (curp_validar(\"SABC560626MDFLRN09\", \u0026p) == CURP_VALIDA) {\n        /* sexo (1: hombre, 2: mujer, 0: x) */\n        printf(\"sexo: %s\", p.sexo == HOMBRE ? \"Hombre\" : \"Mujer\");\n\n        /* fecha de nacimiento */\n        printf(\"nacimiento: %d-%02d-%02d\",\n               p.anio_nacimiento,\n               p.mes_nacimiento,\n               p.dia_nacimiento);\n\n        /* entidad federativa de nacimiento */\n        printf(\"entidad: %s\", curp_entidad_nombre(p.entidad));\n        printf(\"entidad iso: %s\", curp_entidad_iso(p.entidad));\n    }\n\n    /* Liberar la memoria al terminar */\n    curp_exit();\n}\n```\n\n## Errores\n\nLa función de validación de la CURP no sólo comprueba si la CURP es correcta\no no, también informa de la razón por la cuál la CURP no es válida.\n\nEs necesario utilizar la función de ayuda `curp_error(int)` para\nobtener la causa del error.\n\n```c\nint r, motivo;\n\nr = curp_validar(\"SABC560626MDFLRN09\", NULL);\nmotivo = curp_error(r);\n```\n\nAdemás, es posible obtener la posición en la cuál se encontró el error\npor medio del macro `CURP_ERROR_POSICION(int)`.\n\n```c\nint r, pos;\n\nr = curp_validar(\"SABC560626MDFLRN09\", NULL);\npos = CURP_ERROR_POSICION(r);\n```\n\nLos errores se listan debajo de acuerdo a su prioridad.\nEn general, los errores que ocurran primero en la CURP toman prioridad sobre\nerrores que ocurran después.\n\n\n\n| Nombre            | Descripción                                    |\n|-------------------|------------------------------------------------|\n| ERROR_FORMATO     | No corresponde a un formato AAAANNNNNNAAAAAAXN |\n| ERROR_ALTISONANTE | Contiene una palabra altisonante               |\n| ERROR_FECHA       | La fecha de nacimiento no es válida            |\n| ERROR_SEXO        | El sexo no es válido                           |\n| ERROR_ENTIDAD     | La entidad de nacimiento no es válida          |\n| ERROR_VERIFICADOR | El dígito verificador no es correcto           |\n| **CURP_VALIDA**   | La CURP tiene un formato válido                |\n\n\n## Compilación\n\nClona el repositorio\n```bash\n$ git clone https://github.com/sanjacob/curp.git\n```\nCompila usando una de estas opciones:\n\n[make][make]\n```bash\n$ make\n$ make check\n```\n\n[Meson][mesonbuild]\n```bash\n$ meson setup build \u0026\u0026 cd build\n$ meson compile\n$ meson test\n```\n\n[CMake][cmake]\n```bash\n$ cmake -B build\n$ cmake --build build\n$ cd build \u0026\u0026 ctest\n```\n\n\n## Contribuciones\n\nSi encuentras un error o vulnerabilidad en la librería, por favor\nabre un *issue* en GitHub, en donde describas el problema en detalle,\ny será examinado lo antes posible.\n\nSi deseas proponer una idea o mejora para la librería, de\nigual forma es necesario abrir un *issue*.\n*Pull Requests* son bienvenidas para problemas pequeños,\no mejoras en *tests*, pero es recomendable preguntar primero.\n\n\n## Licencia\n\nEsta librería se proporciona bajo la licencia\n[Lesser General Public License v2.1](LICENSE).\n\nTambién es posible obtener una **licencia comercial** que\nte permite integrar la librería directamente de forma estática,\ny hacer modificaciones a la misma, sin la obligación de compartir\ntu código fuente con el usuario.\n\nOtros beneficios incluyen:\n\n- Soporte técnico para instalación y uso de la librería\n- Versiones hechas a la medida para tus requisitos específicos\n- Soporte para integrar la librería en Java, C#, C++, PHP, y más\n\nLa licencia comercial tiene un costo único de $489 MXN.\nPara adquirirla, escribe a jacob@san.contact\n\n\u003c!-- LINKS --\u003e\n[mesonbuild]: https://mesonbuild.com\n[cmake]: https://cmake.org\n[make]: https://linux.die.net/man/1/make\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanjacob%2Fcurp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsanjacob%2Fcurp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanjacob%2Fcurp/lists"}