Skip to content

jhonatanHzB/rfc-typescript

Repository files navigation

RFC TypeScript

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.

Características

  • 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.

Estructura principal

  • 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.

Cómo funciona el cálculo

  • 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).

Instalación

  • 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

Uso en el navegador

  1. Asegura que el bundle de la app se incluya en tu página (vía webpack).
  2. 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.

Uso programático (opcional)

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)

Flujo en la UI

  • 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.

Notas e integración

  • 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.

Contribuir

  • 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.

Licencia

MIT.

About

Algoritmo de generación de RFC con homoclave

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages