phpyk
9/13/2018 - 9:13 AM

检测手机号合法性

大陆、日本、马来西亚、香港、菲律宾

<?php
/**
 * Created by PhpStorm.
 * User: kk
 * Date: 2016/12/22
 * Time: 下午3:57
 */

namespace App\Utils\Filters;


class FilterMobile
{
    const CHINA = '86';
    const MALAYSIA = '60';
    const PHILIPPINES = '63';
    const JAPAN = '81';
    const HONGKONG = '852';

    private static $_types = array(
        self::CHINA => '中国大陆',
        self::MALAYSIA => '马来西亚',
        self::PHILIPPINES => '菲律宾',
        self::JAPAN => '日本',
        self::HONGKONG => '香港',
    );

    public static function checkMobile($countryCode, $mobile)
    {
        if ($countryCode == self::CHINA) {
            if (preg_match("/^1[34578]\d{9}$/", $mobile)) {
                return true;
            }
        } elseif ($countryCode == self::MALAYSIA) {
            //马来西亚的手机号码,前面都是0的,(有011,012,014,016,017和019)。
            //这代表着不同的电讯公司,012是明讯,016是数码电讯,019是天地通,011
            //前面的0可以省略 0127834545
            if (preg_match("/^01[124679]\d{7}$/", $mobile) || preg_match("/^1[124679]\d{7}$/", $mobile)) {
                return true;
            }
        } elseif ($countryCode == self::PHILIPPINES) {
            //菲律宾手机号以9开头,不加0长度为10位,前面的0可以省略
            //eg:916-550-9626
            if (preg_match("/^09\d{9}$/", $mobile) || preg_match("/^9\d{9}$/", $mobile)) {
                return true;
            }
        } elseif ($countryCode == self::JAPAN) {
            //日本的电话号码由三个部分组成[06(区号)+5768(局号)+6578(受话人号码)]
            //日本手机号码11位,有080开有和090开头的,
            //如果从中国打,要把前面的0去掉,比如打日本手机09012345678,要拨0081-9012345678
            if (preg_match("/^08\d{9}$/", $mobile) || preg_match("/^09\d{9}$/", $mobile) || preg_match("/^8\d{9}$/", $mobile) || preg_match("/^9\d{9}$/", $mobile)) {
                return true;
            }
        } elseif ($countryCode == self::HONGKONG) {
            //香港的电话号码由9或6开头 后面加7位数字
            if (preg_match("/^([6|9])\d{7}$/", $mobile)) {
                return true;
            }
        }

        return false;
    }
}