Como detectar si un número de teléfono fijo es correcto

Código PHP

PHP – Validaciones – preg_match phone

Función que nos indica si un número de teléfono es correcto y pertenece a un fijo español, se detecta los primeros números para determinar la provincia.

El formato español contempla una longitud de 9 números.

/**
 * Class HelperValidate
 */
abstract class HelperValidate
{

    /**
     * Valida si es un número de telefono fijo
     *
     * @param string $tel
     *
     * @return bool
     */
    public static function isPhoneFix($tel)
    {
        $tel  = trim($tel);
        $ok_1 = (preg_match("/^[0-9]+$/", $tel) && 
                 strlen($tel) == 9);
  
        $codigo = intval(substr($tel, 0, 2));
  
        switch ($codigo) {
            case 91: // -- Madrid
            case 93: // -- Barcelona
            case 94: // -- Vizcaya
            case 95: // -- Sevilla
            case 96: // -- Alicante
            case 98: // -- Asturias
                $ok_provincia_2 = true;
                break;
            default:
                $ok_provincia_2 = false;
                break;
        }
  
        $codigo = intval(substr($tel, 0, 3));
  
        switch ($codigo) {
            case 923: // -- Salamanca
            case 973: // -- Lleida
            case 921: // -- Segovia
            case 926: // -- Ciudad Real
            case 975: // -- Soria
            case 977: // -- Tarragona
            case 920: // -- Avila
            case 922: // -- Tenerife
            case 924: // -- Badajoz
            case 972: // -- Girona
            case 978: // -- Teruel
            case 971: // -- Baleares
            case 925: // -- Toledo
            case 979: // -- Palencia
            case 927: // -- Cáceres
            case 928: // -- Palmas, Las
            case 974: // -- Huesca
            case 976: // -- Zaragoza
                $ok_provincia_3 = true;
                break;
            default:
                $ok_provincia_3 = false;
                break;
        }
  
        return (($ok_provincia_2 || $ok_provincia_3) && 
                 $ok_1);
    }

}