phpcfdi / rfc
PHP library to deal with Mexican RFC
Installs: 22 317
Dependents: 3
Suggesters: 0
Security: 0
Stars: 22
Watchers: 2
Forks: 4
Open Issues: 0
Requires
- php: >=7.3
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- fakerphp/faker: ^1.13
- phpunit/phpunit: ^9.5
README
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
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
Usa composer
composer require phpcfdi/rfc
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
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
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
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
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
.
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
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:
- https://www.studocu.com/es-mx/document/universidad-del-valle-de-mexico/administracion/algoritmo-para-generar-el-rfc-con-homoclave-para-personas-fisicas-y-morales/12002840
- https://solucionfactible.com/sfic/capitulos/timbrado/rfc-digito-verificador.jsp
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.
- Consideraciones generales de la librerÃa.
- Conversión de un RFC a entero y viceversa.
- Generador de RFC ficticios.
Soporte
Puedes obtener soporte abriendo un ticker en Github.
Adicionalmente, esta librerÃa pertenece a la comunidad PhpCfdi, asà que puedes usar los mismos canales de comunicación para obtener ayuda de algún miembro de la comunidad.
Compatibilidad
Esta librerÃa se mantendrá compatible con al menos la versión con soporte activo de PHP más reciente.
También utilizamos Versionado Semántico 2.0.0 por lo que puedes usar esta librerÃa sin temor a romper tu aplicación.
Contribuciones
Las contribuciones con bienvenidas. Por favor lee CONTRIBUTING para más detalles y recuerda revisar el archivo de tareas pendientes TODO y el archivo CHANGELOG.
Copyright and License
The phpcfdi/rfc
library is copyright © PhpCfdi
and licensed for use under the MIT License (MIT). Please see LICENSE for more information.