Laravel 中自定义 验证,例如身份证号验证

在laravel 5.5之后,您可以创建自己的自定义验证规则对象。
要创建新规则,只需运行Artisan命令:

php artisan make:rule Id


laravel将把新的rule类放在app/Rules目录中
自定义对象验证规则的示例可能类似于:

 

 

<?php
namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Id implements Rule
{
    private $message;

    /**
     * Determine if the validation rule passes.
     *
     * @param string $attribute
     * @param mixed  $value
     *
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if(!$this->isValidCard($value)){
            $this->message = '身份证格式错误,请输入正确的身份证.';
            return false;
        }

        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $this->message;
    }

    /**
     * 身份证验证
     * @param $id
     * @return bool
     */
    private function isValidCard($id) {
        if(18 != strlen($id)) {
            return false;
        }
        $weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
        $code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
        $mode = 0;
        $ver = substr($id, -1);
        if($ver == 'x') {
            $ver = 'X';
        }
        foreach($weight as $key => $val) {
            if($key == 17) {
                continue;
            }
            $digit = intval(substr($id, $key, 1));
            $mode += $digit * $val;
        }
        $mode %= 11;
        if($ver != $code[$mode]) {
            return false;
        }
        list($month, $day, $year) = self::getMDYFromCard($id);
        $check = checkdate($month, $day, $year);
        if(!$check) {
            return false;
        }
        $today = date('Ymd');
        $date = substr($id, 6, 8);
        if($date >= $today) {
            return false;
        }
        return true;
    }

    private  function getMDYFromCard($id) {
        $date = substr($id, 6, 8);
        $year = substr($date, 0, 4);
        $month = substr($date, 4, 2);
        $day = substr($date, 6);
        return [$month, $day, $year];
    }
}

 

在控制器里面引入:

$rules = [

    'buyer_name' => ['regex:/^[\p{Han}|\w]{2,30}$/u'],
    'buyer_id_number' => ['required', new Id],
    'buyer_telephone' => 'required|unique:investor',

];

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值