几个常用得有效性验证(手机号、身份证号、车牌号)

程序&源码 CN-P5 992℃ 0评论

身份证号验证

    function validation_filter_id_card($id_card){
        if(strlen($id_card)==18){
            return idcard_checksum18($id_card);
        }elseif((strlen($id_card)==15)){
            $id_card=idcard_15to18($id_card);
            return idcard_checksum18($id_card);
        }else{
            return false;
        }
    }
    // 计算身份证校验码,根据国家标准GB 11643-1999
    function idcard_verify_number($idcard_base){
        if(strlen($idcard_base)!=17){
            return false;
        }
        //加权因子
        $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
        //校验码对应值
        $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
        $checksum=0;
        for($i=0;$i<strlen($idcard_base);$i++){
            $checksum += substr($idcard_base,$i,1) * $factor[$i];
        }
        $mod=$checksum % 11;
        $verify_number=$verify_number_list[$mod];
        return $verify_number;
    }
    // 将15位身份证升级到18位
    function idcard_15to18($idcard){
        if(strlen($idcard)!=15){
            return false;
        }else{
            // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
            if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){
                $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);
            }else{
                $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9);
            }
        }
        $idcard=$idcard.idcard_verify_number($idcard);
        return $idcard;
    }
    // 18位身份证校验码有效性检查
    function idcard_checksum18($idcard){
        if(strlen($idcard)!=18){
            return false;
        }
        $idcard_base=substr($idcard,0,17);
        if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
            return false;
        }else{
            return true;
        }
    }

调用方法如:validation_filter_id_card('身份证号码');

手机号

function isMobile($mobile) {
    if (!is_numeric($mobile)) {
        return false;
    }
    return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,5,6,7,8]{1}\d{8}$|^18[\d]{9}$#', $mobile) ? true : false;
}

车牌号

/**
 * 判断是否合法车牌号
 *
 * @name isCarLicense
 * @access public
 * @author furong
 * @param $license
 * @return bool
 * @since 2016年12月24日 11:51:22
 * @abstract
 * 2017年4月7日 14:06:17  增加对 特种车牌,武警车牌,军牌的校验
 *
 */
function isCarLicense($license)
{
    if (empty($license)) {
        return false;
    }
    #匹配民用车牌和使馆车牌
    # 判断标准
    # 1,第一位为汉字省份缩写
    # 2,第二位为大写字母城市编码
    # 3,后面是5位仅含字母和数字的组合
    {
        $regular = "/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[A-Z]{1}[0-9a-zA-Z]{5}$/u";
        preg_match($regular, $license, $match);
        if (isset($match[0])) {
            return true;
        }
    }

    #匹配特种车牌(挂,警,学,领,港,澳)
    #参考 https://wenku.baidu.com/view/4573909a964bcf84b9d57bc5.html
    {
        $regular = '/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]{1}[A-Z]{1}[0-9a-zA-Z]{4}[挂警学领港澳]{1}$/u';
        preg_match($regular, $license, $match);
        if (isset($match[0])) {
            return true;
        }
    }

    #匹配武警车牌
    #参考 https://wenku.baidu.com/view/7fe0b333aaea998fcc220e48.html
    {
        $regular = '/^WJ[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]?[0-9a-zA-Z]{5}$/ui';
        preg_match($regular, $license, $match);
        if (isset($match[0])) {
            return true;
        }
    }

    #匹配军牌
    #参考 http://auto.sina.com.cn/service/2013-05-03/18111149551.shtml
    {
        $regular = "/[A-Z]{2}[0-9]{5}$/";
        preg_match($regular, $license, $match);
        if (isset($match[0])) {
            return true;
        }
    }
    return false;
}

以上来自网络收集 侵权请留言

转载请注明:黑白的自留地 » 几个常用得有效性验证(手机号、身份证号、车牌号)

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址