Created
March 4, 2018 09:14
-
-
Save valdeir2000/507cffbfbdc9ab9920701a1bbba43441 to your computer and use it in GitHub Desktop.
Validação para o GUMP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Código responsável pela validação de CPF e data de nascimento para o GUMP (https://github.com/Wixel/GUMP) | |
* @author: Valdeir Psr | |
*/ | |
require_once "vendor/autoload.php"; | |
class ValidatorPsr extends GUMP { | |
/** | |
* Criando validação do CPF | |
* | |
* @param $field Campo a ser validado | |
* @param $value Valores dos campos | |
*/ | |
public function validate_cpf($field, $value) | |
{ | |
/* Adiciona mensagem de erro */ | |
GUMP::set_error_messages(['validate_cpf' => 'O campo {field} é inválido']); | |
/** | |
* Trecho retirado do repositório https://github.com/Respect/Validation/blob/a3c945aa51041b7a479ee9482c69a0f059fc228e/library/Rules/Cpf.php | |
*/ | |
$cpf = preg_replace('/\D/', '', $value[$field]); | |
if (strlen($cpf) != 11 || preg_match("/^{$cpf[0]}{11}$/", $cpf)) { | |
return array( | |
'field' => $field, | |
'value' => $value, | |
'rule' => __FUNCTION__, | |
'param' => null, | |
); | |
} | |
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--); | |
if ($cpf[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { | |
return array( | |
'field' => $field, | |
'value' => $value, | |
'rule' => __FUNCTION__, | |
'param' => null, | |
); | |
} | |
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--); | |
if ($cpf[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { | |
return array( | |
'field' => $field, | |
'value' => $value, | |
'rule' => __FUNCTION__, | |
'param' => null, | |
); | |
} | |
return true; | |
} | |
/** | |
* Criando validação da data de nascimento | |
* | |
* @param $field Campo a ser validado | |
* @param $value Valores dos campos | |
* @param $range Limite de idade. Ex: "18 25", irá verificar | |
* se o usuário possui entre 18 e 25 anos | |
*/ | |
public function validate_data_nascimento($field, $value, $range = null) | |
{ | |
/** | |
* Caso você não informe a idade limite, | |
* verifica apenas a data | |
*/ | |
if ($range === null) { | |
/* Adiciona mensagem de erro */ | |
GUMP::set_error_messages(['validate_data_nascimento' => 'O campo {field} é inválido']); | |
/* Captura o dia, mês e ano, respectivamente */ | |
list($day,$month,$year) = explode("/", $value[$field]); | |
if (!checkdate($month,$day,$year)) { | |
return array( | |
'field' => $field, | |
'value' => $value, | |
'rule' => __FUNCTION__, | |
'param' => null, | |
); | |
} | |
} | |
/* Caso contrário, verifica o limite */ | |
else { | |
/* Separa os valores pelo espaço e captura-os */ | |
@list($start,$end) = explode(" ", $range); | |
/* Captura a data atual */ | |
$dateCurrent = new DateTime(); | |
/* Converte a data do usuário para o objeto DateTime */ | |
$dateUser = new DateTime( str_replace("/", "-", $value[$field]) ); | |
/* Captura a diferença entre as datas */ | |
$diff = $dateCurrent->diff($dateUser); | |
/* Verifica se o usuário está na idade limite */ | |
if (!($diff->y >= $start && ($diff->y <= $end || $end == null))) { | |
return array( | |
'field' => $field, | |
'value' => $value, | |
'rule' => __FUNCTION__, | |
'param' => null, | |
); | |
} | |
} | |
} | |
} | |
/* Validando os campos */ | |
$validator = new ValidatorPsr(); | |
var_dump( $validator->validate([ | |
'cpf_valido' => '98584138072', | |
'cpf_invalido' => '12345678900', | |
'data_valida' => '28/02/2018', | |
'data_invalida' => '29/02/2018', | |
'idade_valida' => '01/02/2000', | |
'idade_invalida' => '01/02/2010', | |
'idade_valida2' => '01/02/1950', | |
'idade_invalida2' => '01/02/2019', | |
], [ | |
'cpf_valido' => 'cpf', | |
'cpf_invalido' => 'cpf', | |
'data_valida' => 'data_nascimento', | |
'data_invalida' => 'data_nascimento', | |
'idade_valida' => 'data_nascimento,18 24', | |
'idade_invalida' => 'data_nascimento,18 24', | |
'idade_valida2' => 'data_nascimento,18', | |
'idade_invalida2' => 'data_nascimento,18 99', | |
]) ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Código responsável pela validação de CPF e data de nascimento para o GUMP (https://github.com/Wixel/GUMP) | |
* @author: Valdeir Psr | |
*/ | |
require_once "vendor/autoload.php"; | |
/** | |
* Criando validação do CPF | |
* | |
* @param $field Nome do campo que será validado | |
* @param $value Valores dos campos | |
*/ | |
GUMP::add_validator("validate_cpf", function($field, $value) { | |
/* Adiciona mensagem de erro */ | |
GUMP::set_error_messages(['validate_cpf' => 'O campo {field} é inválido']); | |
/** | |
* Trecho retirado do repositório https://github.com/Respect/Validation/blob/a3c945aa51041b7a479ee9482c69a0f059fc228e/library/Rules/Cpf.php | |
*/ | |
$cpf = preg_replace('/\D/', '', $value[$field]); | |
if (strlen($cpf) != 11 || preg_match("/^{$cpf[0]}{11}$/", $cpf)) { | |
return false; | |
} | |
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--); | |
if ($cpf[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { | |
return false; | |
} | |
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--); | |
if ($cpf[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) { | |
return false; | |
} | |
return true; | |
}); | |
/** | |
* Criando validação da data de nascimento | |
* | |
* @param $field Nome do campo que será validado | |
* @param $value Valores dos campos | |
* @param $range Limite de idade. Ex: "18 25", irá verificar | |
* se o usuário possui entre 18 e 25 anos | |
*/ | |
GUMP::add_validator("validate_data_nascimento", function($field, $value, $range = null) { | |
/** | |
* Caso você não informe a idade limite, | |
* verifica apenas a data | |
*/ | |
if ($range === null) { | |
/* Adiciona mensagem de erro */ | |
GUMP::set_error_messages(['validate_data_nascimento' => 'O campo {field} é inválido']); | |
/* Captura o dia, mês e ano, respectivamente */ | |
list($day,$month,$year) = explode("/", $value[$field]); | |
return checkdate($month,$day,$year); | |
} | |
/* Caso contrário, verifica o limite */ | |
else { | |
/* Separa os valores pelo espaço e captura-os */ | |
@list($start,$end) = explode(" ", $range); | |
/* Captura a data atual */ | |
$dateCurrent = new DateTime(); | |
/* Converte a data do usuário para o objeto DateTime */ | |
$dateUser = new DateTime( str_replace("/", "-", $value[$field]) ); | |
/* Captura a diferença entre as datas */ | |
$diff = $dateCurrent->diff($dateUser); | |
/* Verifica se o usuário está na idade limite */ | |
return ($diff->y >= $start && ($diff->y <= $end || $end == null)); | |
} | |
}); | |
/* Validando os campos */ | |
var_dump(GUMP::is_valid([ | |
'cpf_valido' => '98584138072', | |
'cpf_invalido' => '12345678900', | |
'data_valida' => '28/02/2018', | |
'data_invalida' => '29/02/2018', | |
'idade_valida' => '01/02/2000', | |
'idade_invalida' => '01/02/2010', | |
'idade_valida2' => '01/02/1950', | |
'idade_invalida2' => '01/02/2019', | |
], [ | |
'cpf_valido' => 'validate_cpf', | |
'cpf_invalido' => 'validate_cpf', | |
'data_valida' => 'validate_data_nascimento', | |
'data_invalida' => 'validate_data_nascimento', | |
'idade_valida' => 'validate_data_nascimento,18 24', | |
'idade_invalida' => 'validate_data_nascimento,18 24', | |
'idade_valida2' => 'validate_data_nascimento,18', | |
'idade_invalida2' => 'validate_data_nascimento,18 99', | |
]) | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Precisando falar com você