Validating date and CPF in GUMP

0

I have two fields to validate: CPF and Date of Birth .

$validation = [
    'email'       => 'required|valid_email',
    'data_de_nascimento' => 'required|date'
    ];

I'm getting the date in the format: 00/00/0000 and the CPF : 000.000.000-00 .

How to validate this data using: GUMP::is_valid( $dados, $validation )

    
asked by anonymous 04.03.2018 / 02:56

1 answer

1

According to the documentation , there are two ways to create validations in GUMP . We can use the static method GUMP::add_validator or we can create our class and add the validate_nossa_validacao method, for example.

Creating validations with the static method

To create a validation with the static method, just use:

GUMP::add_validator("nome_da_validacao", function($field, $input, $param = null) {
    /* Verifica os dados */

    return true; //Em caso de sucesso ou "false" em caso de falha.
});

Full Code:

<?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',
    ])
);

Code removed from site: link

Creating validator with classes

Here we need to create a class and then extend the class GUMP , for example:

class ValidatorPsr extends GUMP {

    /**
     * Criando validação do CPF
     *
     * @param $field Campo a ser validado
     * @param $value Valores dos campos
     * @param $param Parâmetro utilizado após a vírgula
     */
    public function validate_nome_da_validacao($field, $value, $param = null)
    {
        /* Utilizamos nosso código para validação */

        /* Em caso de erro, DEVEMOS retornar */
        return array(
            'field' => $field,
            'value' => $value,
            'rule' => __FUNCTION__,
            'param' => null,
        );

    }
  

It is important that your validator name begins with validate_

In this anonymous function, we get three parameters:

  • $field : The name of the field that will be validated
  • $input : Values to be validated
  • $param : The parameter that can be passed after the comma.
  • In the example below, I create the validation functions and comment on the required lines:

    Follow the complete and commented code:

    <?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',
        ]) );
    

    Code removed from site: link

        
    04.03.2018 / 10:29