Generador del RFC mexicano (Registro Federal de Contribuyentes) en TypeScript para uso en navegador. Calcula:
- Código por nombre y apellidos (4 caracteres).
- Fecha de nacimiento en formato AAMMDD (6 caracteres).
- Homoclave (2 caracteres) basada en el nombre completo.
- Dígito verificador (1 carácter) con la ponderación oficial.
Además, se integra con inputs del DOM para autocompletar y validar campos en tiempo real.
- Normalización de acentos y ñ.
- Manejo de palabras comunes en apellidos y nombres compuestos (DE, DEL, LA, VAN, etc.).
- Enmascaramiento de palabras prohibidas en el prefijo del RFC.
- Cálculo de homoclave y dígito verificador conforme a las reglas conocidas.
- Integración directa con inputs HTML mediante clases CSS:
- .rfcInput para entradas de datos.
- .generateRFC para el RFC calculado (10 primeros caracteres).
- .generateHomo para la homoclave (3 últimos caracteres del RFC completo incluyendo verificador).
- Preparado para bundling con webpack.
- app/src/index.ts: orquesta la captura de inputs, arma el RFC completo y actualiza el DOM.
- app/src/namecode.ts: genera el prefijo de 4 caracteres a partir de nombre y apellidos, con reglas de normalización y palabras prohibidas.
- app/src/homoclave.ts: calcula los 2 caracteres de homoclave a partir del nombre completo.
- app/src/interfaces.ts: interfaz PersonData para tipado de datos personales.
- app/src/variables.ts: constantes de apoyo (mapas, regex, dígitos), si se requieren de forma modular.
- Prefijo por nombre y apellidos (4 chars):
- Considera primer apellido, segunda vocal interna, segundo apellido y primera letra del nombre filtrado (sin partículas y omitiendo nombres frecuentes como JOSE/MARIA cuando procede).
- Evita palabras prohibidas sustituyendo el último carácter por X.
- Fecha (6 chars): AAMMDD a partir de día, mes y año.
- Homoclave (2 chars): mapeo y suma por pares sobre el nombre completo normalizado.
- Dígito verificador (1 char): ponderación sobre 12 caracteres previos y módulo 11 (devuelve 0 o 0–Z).
- Requisitos: Node.js y npm.
- Dependencias del proyecto: webpack 4, TypeScript y Babel (ya configurados en el proyecto).
Pasos:
# Instalar dependencias
npm install
# Levantar entorno de desarrollo
npm run local- Asegura que el bundle de la app se incluya en tu página (vía webpack).
- En tu HTML, define inputs con:
- .rfcInput en cada campo capturable.
- data-rfc para indicar a qué propiedad de la persona corresponde.
- .generateRFC y .generateHomo para los campos resultado.
Ejemplo mínimo:
<input class="rfcInput" data-rfc="namePerson" placeholder="Nombre(s)" />
<input class="rfcInput" data-rfc="paternalSurname" placeholder="Apellido paterno" />
<input class="rfcInput" data-rfc="motherSurname" placeholder="Apellido materno" />
<!-- Campo de fecha: puedes proveer day, month y year vía data-attributes en el input de fecha que dispares en blur -->
<input class="rfcInput" data-rfc="dateOfBirth" data-day="15" data-month="04" data-year="1990" placeholder="Fecha de Nacimiento" />
<input class="generateRFC" placeholder="RFC (10)" readonly />
<input class="generateHomo" placeholder="Homoclave (3)" readonly />Al cargar la página, la clase principal vincula eventos blur/input para actualizar automáticamente el RFC parcial y completo, marcando los campos como válidos cuando correspondan.
Si quieres usar las clases directamente:
import NameCode from './app/src/namecode'
import Homoclave from './app/src/homoclave'
const person = {
namePerson: 'JUAN CARLOS',
paternalSurname: 'PÉREZ',
motherSurname: 'GÓMEZ',
dayBirth: 15,
monthBirth: 4,
yearBirth: 1990,
dateOfBirth: '' // opcional
}
const nameCode = new NameCode(person).toString() // 4 chars
const birth = '90' + '04' + '15' // 6 chars (AAMMDD)
const homo = new Homoclave().calculateCode(`${person.paternalSurname} ${person.motherSurname} ${person.namePerson}`) // 2 chars
// Para el dígito verificador, usa la lógica principal incluida en index.ts (ponderación y módulo 11)- En cada blur de un input con .rfcInput, se actualizan los datos de la persona.
- Si solo hay nombre, el campo .generateRFC muestra la inicial en mayúscula como guía.
- Con nombre y apellidos, .generateRFC muestra el prefijo de 4 caracteres.
- Con día, mes y año, se calcula RFC completo: 10 primeros caracteres al .generateRFC y 3 últimos a .generateHomo. Se añaden clases de validación cuando las longitudes son correctas.
- La lógica asume la existencia de ciertos objetos globales opcionales para integraciones específicas (por ejemplo, para marcar campos obligatorios o máscaras de entrada). Si no existen en tu proyecto, simplemente no se aplicarán esos efectos.
- El bundle está orientado a uso en navegador; para Node.js necesitarías adaptar la capa de entrada/salida.
- Crea un branch desde main.
- Asegúrate de ejecutar lint y build antes de abrir un PR.
- Incluye tests o casos de ejemplo cuando toques la lógica de cálculo.
MIT.