DevKit.Rfc 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package DevKit.Rfc --version 1.0.0
                    
NuGet\Install-Package DevKit.Rfc -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DevKit.Rfc" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DevKit.Rfc" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="DevKit.Rfc" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DevKit.Rfc --version 1.0.0
                    
#r "nuget: DevKit.Rfc, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DevKit.Rfc@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DevKit.Rfc&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=DevKit.Rfc&version=1.0.0
                    
Install as a Cake Tool

DevKit.Rfc

Biblioteca .NET para el cálculo de CURP y RFC mexicanos, implementada siguiendo los principios SOLID del Tío Bob (Robert C. Martin).

🎯 Características

  • Cálculo de CURP para personas físicas
  • Cálculo de RFC para personas físicas y morales
  • Homoclave opcional para RFC
  • Validación de palabras altisonantes
  • Normalización de acentos y caracteres especiales
  • Arquitectura SOLID con inyección de dependencias
  • Resultados tipados con manejo de errores
  • Métodos de conveniencia para uso rápido

📦 Instalación

dotnet add package DevKit.Rfc

🚀 Uso Rápido

CURP - Método Simple

using DevKit.Rfc;

// Calcular CURP directamente
var curp = RfcCurpHelper.CalcularCurp(
    "JUAN", 
    "PEREZ", 
    "LOPEZ", 
    new DateTime(1980, 5, 15), 
    'H', 
    "DF"
);
// Resultado: "PELJ800515HDFXXX00"

RFC - Métodos Simples

// RFC Persona Física sin homoclave
var rfc = RfcCurpHelper.CalcularRfcPersonaFisica(
    "JUAN", 
    "PEREZ", 
    "LOPEZ", 
    new DateTime(1980, 5, 15)
);

// RFC Persona Física con homoclave
var rfcConHomoclave = RfcCurpHelper.CalcularRfcPersonaFisica(
    "JUAN", 
    "PEREZ", 
    "LOPEZ", 
    new DateTime(1980, 5, 15), 
    conHomoclave: true
);

// RFC Persona Moral
var rfcMoral = RfcCurpHelper.CalcularRfcPersonaMoral(
    "EMPRESA SA DE CV", 
    new DateTime(2000, 1, 1), 
    conHomoclave: true
);

🏗️ Uso Avanzado con Inyección de Dependencias

Modelos de Datos

using DevKit.Rfc.Models;

// Persona Física
var persona = new PersonaFisica(
    nombre: "JUAN",
    apellidoPaterno: "PEREZ",
    apellidoMaterno: "LOPEZ",
    fechaNacimiento: new DateTime(1980, 5, 15),
    sexo: 'H',
    estadoNacimiento: "DF"
);

// Persona Moral
var personaMoral = new PersonaMoral(
    razonSocial: "EMPRESA SA DE CV",
    fechaConstitucion: new DateTime(2000, 1, 1)
);

Resultados Detallados

using DevKit.Rfc.Models;

// CURP con resultado detallado
var curpResult = RfcCurpHelper.CalcularCurp(persona);
if (curpResult.IsValid)
{
    Console.WriteLine($"CURP: {curpResult.Curp}");
}
else
{
    Console.WriteLine($"Error: {curpResult.ErrorMessage}");
}

// RFC con resultado detallado
var rfcResult = RfcCurpHelper.CalcularRfc(persona, conHomoclave: true);
if (rfcResult.IsValid)
{
    Console.WriteLine($"RFC: {rfcResult.Rfc}");
    Console.WriteLine($"Con homoclave: {rfcResult.HasHomoclave}");
}
else
{
    Console.WriteLine($"Error: {rfcResult.ErrorMessage}");
}

Inyección de Dependencias Manual

using DevKit.Rfc.Factories;
using DevKit.Rfc.Interfaces;

// Crear factory
var factory = new RfcCurpFactory();

// Crear calculadores
ICurpCalculator curpCalculator = factory.CreateCurpCalculator();
IRfcCalculator rfcCalculator = factory.CreateRfcCalculator();

// Usar calculadores
var curpResult = curpCalculator.Calculate(persona);
var rfcResult = rfcCalculator.Calculate(persona, conHomoclave: true);

🏛️ Principios SOLID Implementados

S - Single Responsibility Principle

  • TextNormalizer: Solo normaliza texto
  • ProfanityValidator: Solo valida palabras altisonantes
  • LetterExtractor: Solo extrae letras y vocales
  • CurpDigitCalculator: Solo calcula dígitos verificadores
  • HomoclaveCalculator: Solo calcula homoclaves

O - Open/Closed Principle

  • Extensible sin modificar código existente
  • Nuevos validadores pueden agregarse mediante interfaces

L - Liskov Substitution Principle

  • Todas las implementaciones pueden sustituir a sus interfaces

I - Interface Segregation Principle

  • Interfaces específicas y pequeñas (ICurpCalculator, IRfcCalculator)

D - Dependency Inversion Principle

  • Depende de abstracciones, no de concreciones
  • Inyección de dependencias via constructor

📋 Especificaciones

CURP (18 caracteres)

  • 4 letras: Apellido paterno (1 letra + 1 vocal) + Apellido materno (1 letra) + Nombre (1 letra)
  • 6 dígitos: Fecha de nacimiento (YYMMDD)
  • 1 carácter: Sexo (H/M)
  • 2 caracteres: Estado de nacimiento (código SAT)
  • 3 caracteres: Consonantes internas
  • 2 caracteres: Dígito verificador

RFC (12-13 caracteres)

  • 3-4 letras: Apellidos y nombre
  • 6 dígitos: Fecha de nacimiento/constitución (YYMMDD)
  • 3 caracteres: Homoclave (opcional)
  • 1 carácter: Dígito verificador

🧪 Ejemplos

// Ejemplo completo
var persona = new PersonaFisica(
    "MARÍA DE LOS ÁNGELES",
    "GONZÁLEZ",
    "MARTÍNEZ",
    new DateTime(1985, 12, 3),
    'M',
    "JAL"
);

var curp = RfcCurpHelper.CalcularCurp(persona);
// "GOMA851203MJZRNN04"

var rfc = RfcCurpHelper.CalcularRfcPersonaFisica(
    "MARÍA DE LOS ÁNGELES", 
    "GONZÁLEZ", 
    "MARTÍNEZ", 
    new DateTime(1985, 12, 3), 
    true
);
// "GOMA851203MJ5"

🔧 Configuración

La biblioteca no requiere configuración adicional. Los valores y catálogos están incluidos:

  • Palabras altisonantes para validación
  • Catálogo de estados del SAT
  • Tablas de conversión para homoclave y dígitos verificadores

📝 Notas

  • La biblioteca sigue las especificaciones oficiales del SAT
  • Incluye manejo de nombres compuestos (CH, LL, TR)
  • Filtra palabras comunes (DE, LA, LOS, etc.)
  • Reemplaza caracteres especiales por X cuando es necesario
  • Valida y corrige palabras altisonantes

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor sigue los principios SOLID y las convenciones de código establecidas.

📄 Licencia

Este proyecto está licenciado bajo la MIT License.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 82 3/22/2026
1.0.0 72 3/22/2026