php常用的验证

<?php

namespace Vendor\Func;

/**
 * 常用的验证
 * Class Verify
 * @package Vendor\Func
 */
class Verify
{
    /**
     * 判断是否包含中文
     * @param $str
     * @return int
     */
    public static function checkHasChinese($str)
    {
        $len = preg_match('/[\x{4e00}-\x{9fa5}]+/u',$str);
        if ($len)
        {
            return true;
        }
        return false;
    }

    /**
     * 判断是否都是中文
     * @param $str
     * @return int
     */
    public static function checkAllChinese($str)
    {
        $len = preg_match('/^[\x{4e00}-\x{9fa5}]+$/u',$str);
        if ($len)
        {
            return true;
        }
        return false;
    }

    /**
     * 验证用户名
     * @param $username
     * @return bool
     */
    public static function checkUserName($username)
    {
        $search = '/^[a-zA-Z][-_a-zA-Z0-9]{5,15}$/';
        if (preg_match($search, $username)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 验证手机号
     * @param $tel
     * @return bool
     */
    public static function checkMobile($tel)
    {
        $search = '/^(1(([356][0-9])|(47)|[8][0-9]|[7][0-9]))\d{8}$/';
        if (preg_match($search, $tel)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 检测日期格式
     * @param $date
     * @return bool
     */
    public static function checkDateFormat($date)
    {
        //匹配日期格式
        if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $date, $parts) && checkdate($parts[2], $parts[3], $parts[1])) {
            return true;
        }
        else {
            return false;
        }
    }


    /**
     * 验证身份证号
     * @param $IDCard
     * @return bool
     */
    public static function checkIDCard($IDCard)
    {
        $preg_card = '/^\d{17}[\d|x]$|^\d{15}$/i';
        if (preg_match($preg_card, $IDCard)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 验证银行卡
    16-19 位卡号校验位采用 Luhn 校验方法计算:
    第一步:把信用卡号倒序(61789372994)
    第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1。(eg:s1=6+7+9+7+9+4=42)
    第三步:取出倒序后的偶数位置上的号码,每个号码乘以2。   (eg:2,16,6,4,18)
    第四步:把第三步得到的大于10的号码转化为个位+十位。(eg:2,7,6,4,9)
    第五步:把处理好的偶数位号码相加,得到s2。 (eg:s2=2+7+6+4+9=28)
    第六步:判读(s1+s2)%10 == 0则有效,否则无效。(有效)
     * @param $card
     * @return bool
     */
    public static function checkBank($card)
    {
        $card = str_replace(' ','',$card);
        // step1 判断是否16到19位
        $pattern = '/^\d{16,19}$/';
        if (!preg_match($pattern,$card)) {
            return false;
        }

        // step2 luhn 算法校验
        $len = strlen($card);
        $sum = 0;
        for ($i = 0; $i < $len ; $i++)
        {
            if (($i + $len) & 1)
            { // 奇数
                $sum += ord($card[$i]) - ord('0');
            }
            else
            { // 偶数
                $tmp = (ord($card[$i]) - ord('0')) * 2;
                $sum += floor($tmp / 10) + $tmp % 10;
            }
        }

        return $sum % 10 === 0;
    }

    /**
     * 验证密码 6~16位,数字字母或下划线
     * @param $pwd
     * @return string
     */
    public static function checkPwd($pwd){
        $pattern= '/^[0-9a-z_]{6,16}$/i'; // i 不区分大小写
        if(preg_match($pattern,$pwd)){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 匹配价格,重量等正整数或正小数
     * @param $num
     * @return bool
     */
    public static function checkDecimal($num) {
        // 可以匹配1.11,10.11  或 0.11
        if (preg_match('/^[1-9]+\d*(.\d{1,2})?$|^\d+.\d{1,2}$/',$num)) {  // ? 0次或1次, + 1次或多次, * 0次或多次
            return true;
        } else {
            return false;
        }
    }

    /**
     * 匹配正整数
     * @param $num
     * @return bool
     */
    public static function checkInteger($num) {
        // 不能小于0
        if (preg_match('/^[1-9]+\d*$/',$num)) {  // ? 0次或1次, + 1次或多次, * 0次或多次
            return true;
        } else {
            return false;
        }
    }

    /**
     * 检测参数是否为数组
     * @param $array
     * @return string
     */
    public static function checkArray($array){
        if (is_array($array)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 检测纳税人识别号
     * 15位、17位、18或者20位码
     * 字母全部大写
     * @param $str
     * @return string
     */
    public static function checkTax($str){
        $pattern= '/^[0-9A-Z]{15,20}$/'; // i 不区分大小写
        if(preg_match($pattern,$str)){
            return true;
        }else{
            return false;
        }
    }
}
posted @ 2019-07-30 11:34  TBHacker  阅读(512)  评论(0编辑  收藏  举报