PHPackages                             phpcfdi/rfc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. phpcfdi/rfc

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

phpcfdi/rfc
===========

PHP library to deal with Mexican RFC

v1.2.0(1y ago)2562.4k↑33.3%53MITPHPPHP &gt;=8.1CI passing

Since Apr 9Pushed 7mo ago1 watchersCompare

[ Source](https://github.com/phpcfdi/rfc)[ Packagist](https://packagist.org/packages/phpcfdi/rfc)[ Docs](https://github.com/phpcfdi/rfc)[ RSS](/packages/phpcfdi-rfc/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (2)Versions (7)Used By (3)

`phpcfdi/rfc`
=============

[](#phpcfdirfc)

[![Source Code](https://camo.githubusercontent.com/25df530d878c4f6843ff6a38e1e8ab11374c9f1461c593d648b6871f6505b38a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736f757263652d706870636664692f7266632d626c75653f6c6f676f3d676974687562)](https://github.com/phpcfdi/rfc)[![Packagist PHP Version Support](https://camo.githubusercontent.com/c3702cc9af0bba19eaeac81aeb43e656e439d0f81233ff2cb8df11c8e38eef38/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f706870636664692f7266633f6c6f676f3d706870)](https://packagist.org/packages/phpcfdi/rfc)[![Discord](https://camo.githubusercontent.com/e7d280832b4bb781e0e83dc7b04440636ea6a67d076133da0938b79caab9d6dd/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3435393836303535343039303238333031393f6c6f676f3d646973636f7264)](https://discord.gg/aFGYXvX)[![Latest Version](https://camo.githubusercontent.com/b2101be19a9f8908e7e924b004df5894c36475c0e74a520fed2e118e7db0998d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f706870636664692f7266633f6c6f676f3d676974)](https://github.com/phpcfdi/rfc/releases)[![Software License](https://camo.githubusercontent.com/3eaffe4e4454cd4ae590a584058b75eecc7cb4b666beaae8a7ac527ca126d9de/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f706870636664692f7266633f6c6f676f3d6f70656e2d736f757263652d696e6974696174697665)](https://github.com/phpcfdi/rfc/blob/main/LICENSE)[![Build Status](https://camo.githubusercontent.com/fe3d1be24edd39f7d919d4bd4bfc68753e804076d3f078b44ceb67342161f6c6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f706870636664692f7266632f6275696c642e796d6c3f6272616e63683d6d61696e266c6f676f3d6769746875622d616374696f6e73)](https://github.com/phpcfdi/rfc/actions/workflows/build.yml?query=branch:main)[![Reliability](https://camo.githubusercontent.com/e1082f5e959bb73353791f72cd4e70dbcd9c258d82a0a7823554f7d636fb10de/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d706870636664695f726663266d65747269633d72656c696162696c6974795f726174696e67)](https://sonarcloud.io/component_measures?id=phpcfdi_rfc&metric=Reliability)[![Maintainability](https://camo.githubusercontent.com/c1147ac152b321de89d9edbaa4c7f4219ba3b662e784187129c2285932de9844/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d706870636664695f726663266d65747269633d7371616c655f726174696e67)](https://sonarcloud.io/component_measures?id=phpcfdi_rfc&metric=Maintainability)[![Code Coverage](https://camo.githubusercontent.com/4e65f48b96a5ea08af35ff13f9e5912908fee6acb3accdb9a1c70cd4315b5b78/68747470733a2f2f696d672e736869656c64732e696f2f736f6e61722f636f7665726167652f706870636664695f7266632f6d61696e3f6c6f676f3d736f6e6172636c6f7564267365727665723d6874747073253341253246253246736f6e6172636c6f75642e696f)](https://sonarcloud.io/component_measures?id=phpcfdi_rfc&metric=Coverage)[![Violations](https://camo.githubusercontent.com/3d095e65ce27868fc04faf857b34c9b5ffec3e53fb3f92d563d249b6e8fdffa1/68747470733a2f2f696d672e736869656c64732e696f2f736f6e61722f76696f6c6174696f6e732f706870636664695f7266632f6d61696e3f666f726d61743d6c6f6e67266c6f676f3d736f6e6172636c6f7564267365727665723d6874747073253341253246253246736f6e6172636c6f75642e696f)](https://sonarcloud.io/project/issues?id=phpcfdi_rfc&resolved=false)[![Total Downloads](https://camo.githubusercontent.com/881ed51eb330212fa25c28e1da212ba0236145efeb9528a9d467ff76ae299c2a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f706870636664692f7266633f6c6f676f3d7061636b6167697374)](https://packagist.org/packages/phpcfdi/rfc)

> Librería de PHP para trabajar con RFC.

🇺🇸 The documentation of this project is in spanish as this is the natural language for the intended audience.

Acerca de
---------

[](#acerca-de)

En México, toda persona física o moral para realizar cualquier actividad económica requiere de un registro ante la Secretaría de Hacienda y Crédito Público (SHCP) llamado Registro Federal de Contribuyentes (RFC).

Esta librería permite trabajar con esta clave desde el aplicativo de PHP.

Instalación
-----------

[](#instalación)

Usa [composer](https://getcomposer.org/)

```
composer require phpcfdi/rfc
```

Uso básico
----------

[](#uso-básico)

```
use PhpCfdi\Rfc\Rfc;
// suponiendo que llega un formulario con rfc => COSC8001137NA
$rfc = Rfc::parse($_POST['rfc']);
echo $rfc->getRfc(); // COSC8001137NA
echo $rfc; // COSC8001137NA
echo json_encode(['data' => $rfc]); // {"data": "COSC8001137NA"}
var_dump($rfc->isFisica()); // bool(true)
var_dump($rfc->isMoral()); // bool(false)
var_dump($rfc->isGeneric()); // bool(false)
var_dump($rfc->isForeign()); // bool(false)
```

Creación de objetos
-------------------

[](#creación-de-objetos)

El objeto `Rfc` se puede crear a partir de cuatro formas:

- `Rfc::parse(string): Rfc`: Se validan los datos de entrada y surge una excepción si son inválidos.
- `Rfc::parseOrNull(string): ?Rfc`: Se validan los datos de entrada y retorna nulo si son inválidos.
- `Rfc::unparsed(string): Rfc`: No se validan los datos de entrada, se creará el objeto con la cadena de caracteres como Rfc.
- `Rfc::fromSerial(int): Rfc`: Se convierte el número de serie del RFC a su representación de cadena de caracteres.

No se puede crear un objeto a partir del constructor `new Rfc`. Use `Rfc::unparsed` en su lugar.

Se recomienda que, siempre que se crea el objeto y los datos de origen no son de confianza, se utilice `Rfc::parse`.

El único dato importante dentro del RFC es la cadena de caracteres misma. Por ello se ha implementado que la conversión a cadena de caracteres y la exportación a JSON devuelvan específicamente este dato.

Números de serie
----------------

[](#números-de-serie)

La representación del *número de serie* corresponde a un número creado con esta misma librería, este número es un entero de 64 bits que se puede almacenar como un entero largo en una base de datos.

Para obtener el número de serie de un RFC puede usar el método `Rfc::calculateSerial()`.

Para crear un Rfc a partir de un entero puede usar `Rfc::fromSerial()`.

La clase responsable de los cálculos involucrados en esta conversión está optimizada con arreglos constantes de conversión por lo que su ejecución es lo más veloz que puede ser.

RFC genérico y foráneo
----------------------

[](#rfc-genérico-y-foráneo)

Es frecuente utilizar RFC que son *virtuales*, por ejemplo, para operaciones sin identificar como una venta de mostrador u operaciones con extranjeros, en estos casos están las constantes `Rfc::RFC_GENERIC = 'XAXX010101000'` y `Rfc::RFC_FOREIGN = 'XEXX010101000'` respectivamente.

Puede usar los métodos `Rfc::newGeneric()` y `Rfc::newForeign()` para crear instancias con estos datos.

Si se desea saber que el RFC es genérico se puede usar el método `Rfc::isGeneric()` y para RFC extranjero `Rfc::isForeign()`.

Generador de RFC
----------------

[](#generador-de-rfc)

Es común usar generadores (ficticios) de datos, esta librería provee la clase `RfcFaker` que se puede utilizar por sí sola o en conjunto con [`FakerPHP/Faker`](https://github.com/FakerPHP/Faker).

Provee métodos para crear una cadena de caracteres que es una clave RFC:

- `RfcFaker::mexicanRfcFisica()` para persona física (13 posiciones).
- `RfcFaker::mexicanRfcMoral()` para persona moral (12 posiciones).
- `RfcFaker::mexicanRfc()` indistintamente una persona moral o física.

Dígito verificador
------------------

[](#dígito-verificador)

Se puede obtener el dígito verificador calculado con el método `Rfc::calculateCheckSum()`, así como conocer si el dígito verificador coincide con el método `Rfc::doesCheckSumMatch()`.

La además provee la clase `CheckSum` para realizar el cálculo del dígito verificador de un RFC. Cabe mencionar que, si bien debería ser siempre coincidente, hay algunos casos donde esto no se respeta (SAT, ¿todo bien?), por ejemplo, el caso de *Restaurantes TOKS* ha tenido los RFC `RT0840921REA` (dígito `A`) y también `RT0840921RE4`.

Puede ver el procedimiento del dígito verificador en alguno de estos enlaces:

-
-

Desarrollo
----------

[](#desarrollo)

Para entender esta librería en el ámbito de desarrollo (para extender o modificar), lee los siguientes documentos:

- [Revisa la guía de contribución](https://github.com/phpcfdi/rfc/blob/main/CONTRIBUTING.md).
- [Consideraciones generales de la librería](develop/Generales.md).
- [Conversión de un RFC a entero y viceversa](develop/ConversionEntero.md).
- [Generador de RFC ficticios](develop/RfcFaker.md).

Soporte
-------

[](#soporte)

Puedes obtener soporte abriendo un ticker en Github.

Adicionalmente, esta librería pertenece a la comunidad [PhpCfdi](https://www.phpcfdi.com), así que puedes usar los mismos canales de comunicación para obtener ayuda de algún miembro de la comunidad.

Compatibilidad
--------------

[](#compatibilidad)

Esta librería se mantendrá compatible con al menos la versión con [soporte activo de PHP](https://www.php.net/supported-versions.php) más reciente.

También utilizamos [Versionado Semántico 2.0.0](docs/SEMVER.md) por lo que puedes usar esta librería sin temor a romper tu aplicación.

Contribuciones
--------------

[](#contribuciones)

Las contribuciones con bienvenidas. Por favor lee [CONTRIBUTING](https://github.com/phpcfdi/rfc/blob/main/CONTRIBUTING.md) para más detalles y recuerda revisar el archivo de tareas pendientes [TODO](https://github.com/phpcfdi/rfc/blob/main/docs/TODO.md) y el archivo [CHANGELOG](https://github.com/phpcfdi/rfc/blob/main/docs/CHANGELOG.md).

Copyright and License
---------------------

[](#copyright-and-license)

The `phpcfdi/rfc` library is copyright © [PhpCfdi](https://www.phpcfdi.com/)and licensed for use under the MIT License (MIT). Please see [LICENSE](https://github.com/phpcfdi/rfc/blob/main/LICENSE) for more information.

###  Health Score

50

—

FairBetter than 96% of packages

Maintenance55

Moderate activity, may be stable

Popularity42

Moderate usage in the ecosystem

Community17

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 98.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~365 days

Recently: every ~372 days

Total

6

Last Release

401d ago

PHP version history (2 changes)v1.0.0PHP &gt;=7.3

v1.2.0PHP &gt;=8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/66964609?v=4)[eclipxe](/maintainers/eclipxe)[@Eclipxe](https://github.com/Eclipxe)

---

Top Contributors

[![eclipxe13](https://avatars.githubusercontent.com/u/1266852?v=4)](https://github.com/eclipxe13 "eclipxe13 (125 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

satmexico

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/phpcfdi-rfc/health.svg)

```
[![Health](https://phpackages.com/badges/phpcfdi-rfc/health.svg)](https://phpackages.com/packages/phpcfdi-rfc)
```

###  Alternatives

[phpcfdi/cfdi-sat-scraper

Web Scraping para extraer facturas electrónicas desde la página del SAT

9018.0k](/packages/phpcfdi-cfdi-sat-scraper)[eclipxe/cfdiutils

PHP Common utilities for Mexican CFDI 3.2, 3.3 &amp; 4.0

141129.9k6](/packages/eclipxe-cfdiutils)[phpcfdi/cfdi-cleaner

Clean up Mexican CFDI

1334.1k1](/packages/phpcfdi-cfdi-cleaner)[phpcfdi/xml-cancelacion

Genera documentos de cancelación de CFDI firmados (XMLSEC)

1149.5k4](/packages/phpcfdi-xml-cancelacion)[phpcfdi/sat-catalogos

Catálogos de SAT para CFDI 3.3, CFDI 4.0 y Nómina 1.2

304.6k24](/packages/phpcfdi-sat-catalogos)[phpcfdi/csf-scraper

Obtiene los datos fiscales actuales de una persona moral o física dado su RFC y CIFID

216.5k](/packages/phpcfdi-csf-scraper)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
