validate-rfc

A simple library to validate mexican RFCs

Usage no npm install needed!

<script type="module">
  import validateRfc from 'https://cdn.skypack.dev/validate-rfc';
</script>

README

Validate RFC

Una librería sencilla y ligera para validar RFCs Mexicanos (Registro Federal de Contribuyentes).

Instalación

NodeJS

Usa NPM o YARN:

$ npm install --save validate-rfc

Navegador

Añade el siguiente script a tu proyecto:

<!-- última versión -->
<script src="https://cdn.jsdelivr.net/gh/manuelmhtr/validate-rfc@latest/dist/index.js" type="text/javascript"></script>

<!-- O especifica una versión -->
<script src="https://cdn.jsdelivr.net/gh/manuelmhtr/validate-rfc@v2.0.1/dist/index.js" type="text/javascript"></script>

<!-- Esto va a exportar una función "validateRfc": -->
<script type="text/javascript">
  var data = validateRfc('mhtr93041179a');
  console.log(data);
</script>

API

La librería expone una sola función (.validateRfc).

.validateRfc(rfc)

Valida que un string sea un RFC válido y entrega detalles sobre la validación.

Parámetros

Parámetro Tipo Descripción
rfc String El RFC a validar.
options Object Parámetros de configuración (Opcional).
options.omitVerificationDigit Boolean Si esta opción es true, se omite la validación del dígito verificador (Default: false).

Respuesta

Regresa un objeto plano con los siguientes valores:

Parámetro Tipo Descripción
isValid Boolean Indica si el string ingresado es un RFC válido.
rfc String El RFC formateado (en mayúsculas, sin espacios ni símbolos). Regresa null en caso de que el RFC sea inválido.
type String El tipo del RFC ingresado. Los valores pueden ser person para personas físicas, company para personas morales, generic para el RFC genérico "XAXX010101000" o foreign para el RFC "XEXX010101000" para residentes en el extranjero. Regresa null en caso de que el RFC sea inválido.
errors Array[String] En caso de que el RFC no sea válido, aquí se indican los motivos por los que no fue válido.

Los posibles valores que puede contener errors y su descripción son:

Error Descripción
INVALID_FORMAT El formato es inválido, es decir, no cuenta con la longitud o estructura de caracteres esperado. Ej: XYZ porque claramente no es un RFC.
INVALID_DATE El string tiene el formato adecuado, pero los dígitos para la fecha generan una fecha inválida. Ej: MHTR815511A70 porque refiere al mes 55.
INVALID_VERIFICATION_DIGIT El string tiene el formato adecuado, pero el último caracter (dígito verificador) es inválido. Ej: MHTR810511A79 termina en 9 pero se espera que termine en 2.
FORBIDDEN_WORD El string contiene una de las palabras inconvenientes que no pueden formar un RFC. Ej: FETO930411792 las iniciales forman la palabra FETO.

Ejemplo

const validateRfc = require('validate-rfc');

const response = validateRfc('mhtr93041179a');
console.log(response);

/*
Imprime:

{
  isValid: true,
  rfc: 'MHTR93041179A',
  type: 'person'
}

*/

const response = validateRfc('Este no es un RFC');
console.log(response);

/*
Imprime:

{
  isValid: false,
  rfc: null,
  type: null,
  errors: ['INVALID_FORMAT']
}

*/

Pruebas

Para correr las pruebas ejecuta el comando:

$ npm test

Problemas conocidos

Discrepancias en el dígito verificador

Algunos RFC registrados ante el SAT no pasan la validación del dígito verificador. Por ejemplo el RFC LME060822IH5 es válido y susceptible a recibir facturas según el validador oficial del SAT, sin embargo al calcular su dígito verificador este debería terminar en 3 en lugar de 5. Por lo tanto en estos casos la librería retorna isValid como false y el error INVALID_VERIFICATION_DIGIT.

Soluciones:

  1. Si encuentras un caso en particular agrega el RFC a la lista de RFCs válidos. En mayúsculas y en orden alfabético. Al agregarlo a la lista ese RFC ayudas a documentar estos casos y evitar que regrese error.
  2. Utiliza la opción omitVerificationDigit para ignorar la validación del dígito verificador. Tiene la ventaja de que es una solución más rápida y cubre todos lo casos; pero va a regresar como válidos muchos RFC que no están permitidos.

Referencias:

Relacionado

Además de validar el formato, necesitas validar que un RFC esté registrado en el SAT o no esté en una lista negra? Prueba con Verifier.

Licencia

MIT