Skip to content

Instantly share code, notes, and snippets.

@valdeir2000
Created March 4, 2018 09:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valdeir2000/507cffbfbdc9ab9920701a1bbba43441 to your computer and use it in GitHub Desktop.
Save valdeir2000/507cffbfbdc9ab9920701a1bbba43441 to your computer and use it in GitHub Desktop.
Validação para o GUMP
<?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',
]) );
<?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',
])
);
@werbson
Copy link

werbson commented Jul 10, 2018

Precisando falar com você

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment