DevKit.Rfc
1.0.1
dotnet add package DevKit.Rfc --version 1.0.1
NuGet\Install-Package DevKit.Rfc -Version 1.0.1
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.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DevKit.Rfc" Version="1.0.1" />
<PackageReference Include="DevKit.Rfc" />
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.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: DevKit.Rfc, 1.0.1"
#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.1
#: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.1
#tool nuget:?package=DevKit.Rfc&version=1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
DevKit.Rfc
Biblioteca .NET para el cálculo de CURP y RFC mexicanos para personas físicas, implementada siguiendo los principios SOLID del Tío Bob (Robert C. Martin) con Value Objects para mayor robustez.
🎯 Características
- ✅ Cálculo de CURP para personas físicas
- ✅ Cálculo de RFC para personas físicas
- ✅ Homoclave siempre generada
- ✅ Value Objects inmutables (
CurpVO,RfcVO) - ✅ Validación de formato y palabras altisonantes
- ✅ Normalización de acentos y caracteres especiales
- ✅ Arquitectura SOLID con clases especializadas
- ✅ 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 - Cálculo Básico
using DevKit.Rfc;
using DevKit.Rfc.ValueObjects;
// Crear calculadora de CURP
var curpCalc = new CurpCalc();
// Calcular CURP
CurpVO curp = curpCalc.CalcularCurp(
nombre: "Juan",
apellidoPaterno: "Pérez",
apellidoMaterno: "López",
fechaNacimiento: new DateTime(1980, 5, 15),
genero: "H",
entidadFederativa: "DF"
);
Console.WriteLine($"CURP: {curp.Valor}");
// Resultado: "PELJ800515HDFXXX00"
RFC - Cálculo Básico
// RFC Persona Física (siempre con homoclave)
var rfcCalc = new RfcCalc();
RfcVO rfc = rfcCalc.CalcularRfcPersonaFisica(
nombre: "Juan",
apellidoPaterno: "Pérez",
apellidoMaterno: "López",
fechaNacimiento: new DateTime(1980, 5, 15)
);
Console.WriteLine($"RFC: {rfc.Value}");
Console.WriteLine($"Homoclave: {rfc.Homoclave}");
Console.WriteLine($"¿Tiene Homoclave?: {rfc.TieneHomoclave}");
// Resultado: "PELJ800515XXX"
🏗️ Uso Avanzado con Value Objects
Validación y Creación Segura
using DevKit.Rfc.ValueObjects;
// Validar y crear RFC de forma segura
string rfcTexto = "VAPD900710CA8";
if (RfcVO.TryCrear(rfcTexto, out RfcVO rfcValido))
{
Console.WriteLine($"RFC válido: {rfcValido.Value}");
Console.WriteLine($"Homoclave: {rfcValido.Homoclave}");
Console.WriteLine($"¿Es Persona Física?: {rfcValido.EsPersonaFisica}");
Console.WriteLine($"¿Tiene Homoclave?: {rfcValido.TieneHomoclave}");
}
else
{
Console.WriteLine("RFC inválido");
}
// Validar y crear CURP de forma segura
string curpTexto = "VAPD900710HVZZLV04";
if (CurpVO.TryCrear(curpTexto, out CurpVO curpValida))
{
Console.WriteLine($"CURP válida: {curpValida.Valor}");
Console.WriteLine($"Género: {curpValida.Genero}");
Console.WriteLine($"Fecha Nacimiento: {curpValida.FechaNacimiento}");
Console.WriteLine($"Entidad: {curpValida.EntidadFederativa}");
Console.WriteLine($"Consonantes: {curpValida.ConsonantesInternas}");
}
else
{
Console.WriteLine("CURP inválida");
}
Comparación de Value Objects
// Crear RFCs para comparar
var rfc1 = RfcVO.Crear("VAPD900710CA8");
var rfc2 = RfcVO.Crear("VAPD900710CA8");
var rfc3 = RfcVO.Crear("VAPD900710CA9");
// Comparaciones
Console.WriteLine($"RFC 1 == RFC 2: {rfc1 == rfc2}"); // True
Console.WriteLine($"RFC 1 == RFC 3: {rfc1 == rfc3}"); // False
Console.WriteLine($"RFC 1.Equals(RFC 2): {rfc1.Equals(rfc2)}"); // True
// Comparación de CURPs
var curp1 = CurpVO.Crear("VAPD900710HVZZLV04");
var curp2 = CurpVO.Crear("VAPD900710HVZZLV04");
var curp3 = CurpVO.Crear("VAPD900710HVZZLV05");
Console.WriteLine($"CURP 1 == CURP 2: {curp1 == curp2}"); // True
Console.WriteLine($"CURP 1 == CURP 3: {curp1 == curp3}"); // False
Acceso a Componentes
// Acceder a componentes del RFC
var rfc = RfcVO.Crear("VAPD900710CA8");
Console.WriteLine($"Letras Nombre: {rfc.LetrasNombre}"); // "VAPD"
Console.WriteLine($"Fecha: {rfc.Fecha}"); // "900710"
Console.WriteLine($"Homoclave: {rfc.Homoclave}"); // "CA"
Console.WriteLine($"Dígito Verificador: {rfc.DigitoVerificador}"); // "8"
// Acceder a componentes de la CURP
var curp = CurpVO.Crear("VAPD900710HVZZLV04");
Console.WriteLine($"Letras Nombre: {curp.LetrasNombre}"); // "VAPD"
Console.WriteLine($"Fecha Nacimiento: {curp.FechaNacimiento}"); // "900710"
Console.WriteLine($"Género: {curp.Genero}"); // 'H'
Console.WriteLine($"Entidad: {curp.EntidadFederativa}"); // "VZ"
Console.WriteLine($"Consonantes: {curp.ConsonantesInternas}"); // "ZLV"
Console.WriteLine($"Dígito Verificador: {curp.DigitoVerificador}"); // "04"
🏛️ Principios SOLID Implementados
S - Single Responsibility Principle
CurpCalc: Solo calcula CURPRfcCalc: Solo calcula RFCCurpVO: Solo representa y valida CURPRfcVO: Solo representa y valida RFC
O - Open/Closed Principle
- Extensible sin modificar código existente
- Value Objects inmutables y extensibles
L - Liskov Substitution Principle
- Todos los Value Objects pueden sustituirse entre sí
I - Interface Segregation Principle
- Clases especializadas con responsabilidades específicas
D - Dependency Inversion Principle
- Sin dependencias externas, todo autocontenido
📋 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: Género (H/M)
- 2 caracteres: Estado de nacimiento (código SAT)
- 3 caracteres: Consonantes internas
- 2 caracteres: Dígito verificador
RFC (13 caracteres - siempre con homoclave)
- 4 letras: Apellidos y nombre
- 6 dígitos: Fecha de nacimiento (YYMMDD)
- 3 caracteres: Homoclave (siempre generada)
- 1 carácter: Dígito verificador
🧪 Ejemplos Completos
Ejemplo 1: Cálculo de RFC para David Vazquez Palestino
using DevKit.Rfc;
using DevKit.Rfc.ValueObjects;
// Datos de ejemplo
var rfcCalc = new RfcCalc();
RfcVO rfc = rfcCalc.CalcularRfcPersonaFisica(
nombre: "David",
apellidoPaterno: "Vazquez",
apellidoMaterno: "Palestino",
fechaNacimiento: new DateTime(1990, 7, 10)
);
Console.WriteLine($"RFC: {rfc.Value}");
Console.WriteLine($"Homoclave: {rfc.Homoclave}");
// Resultado: "VAPD900710CA8" ✅ RFC correcto de David
Ejemplo 2: Cálculo de CURP con nombres compuestos
var curpCalc = new CurpCalc();
CurpVO curp = curpCalc.CalcularCurp(
nombre: "José Daniel",
apellidoPaterno: "Vázquez",
apellidoMaterno: "Palestino",
fechaNacimiento: new DateTime(2003, 1, 31),
genero: "H",
entidadFederativa: "VZ"
);
Console.WriteLine($"CURP: {curp.Valor}");
// Resultado: "VAPD030131HVZZLNA5"
🔧 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
- Algoritmo oficial del SAT para dígito verificador
📝 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
- Los Value Objects son inmutables y thread-safe
- El dígito verificador usa la tabla oficial del SAT (incluye ñ = 24)
🤝 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 | Versions 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.