Estuve buscando alguna en la web y ninguna me lleno el ojo así que me puse a hacer una propia, esta función valida lo siguiente:
- Valida que los RFC sean de longitud de 12 ó 13 caracteres
- Que los primeros 3 o 4 caracteres (Persona Moral y Persona Fisica respectivamente) sean letras
- Que los 6 caracteres después de las primeras 3 o 4 letras sean números
- Y que la homoclave no tenga otros caracteres más que números y/o letras
Código PHP:
function validaRFC($valor) {
$valor = str_replace("-", "", $valor);
$cuartoValor = substr($valor, 3, 1);
//RFC Persona Moral.
if (ctype_digit($cuartoValor) && strlen($valor) == 12) {
$letras = substr($valor, 0, 3);
$numeros = substr($valor, 3, 6);
$homoclave = substr($valor, 9, 3);
if (ctype_alpha($letras) && ctype_digit($numeros) && ctype_alnum($homoclave)) {
return true;
}
//RFC Persona Física.
} else if (ctype_alpha($cuartoValor) && strlen($valor) == 13) {
$letras = substr($valor, 0, 4);
$numeros = substr($valor, 4, 6);
$homoclave = substr($valor, 10, 3);
if (ctype_alpha($letras) && ctype_digit($numeros) && ctype_alnum($homoclave)) {
return true;
}
}else {
return false;
}
}
if(validaRFC("VIFG2335636V4")){
echo "Estructura Valida";
} else {
echo "Estructura Invalida";
}