Existe algumas formas, a forma que vou te passar agora é a usual:
Crie uma classe da seguinte forma:
Crie uma pasta em app\Utils
e a codificação logo abaixo (só ratificando pode ser feita outras validações com a mesma lógica):
<?php namespace App\Utils;
class CpfValidation
{
public function validate($attribute, $value, $parameters, $validator)
{
return $this->isValidate($attribute, $value);
}
protected function isValidate($attribute, $value)
{
$c = preg_replace('/\D/', '', $value);
if (strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) {
return false;
}
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);
if ($c[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);
if ($c[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
return true;
}
}
Mas isso agora precisa ser registrado no Framework Laravel
da seguinte forma:
Abra o código em app\Providers
o arquivo AppServiceProvider.php
e no método boot
adicione essa nova validação:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('cnpj', '\App\Utils\CpfValidation@validate');
Pronto com isso o Laravel
sabe que existe essa validação e só configurar para validação:
$regras = [
'nome'=>'required',
'status'=>'required',
'tipoAtendimento'=>'required',
'sexo'=>'required',
'contato'=>'required',
'sintomasQueixas'=>'required',
'mae'=>'required',
'cpf' => 'required|cpf' // configura assim
];