Veja como criar uma classe para validar  #CPF e #CNPJ em seus formula?ios com regras backend.

Se você já está em um projeto #codeigniter siga os passoas abaixo.

 

 

1 - Criando classe de validação. Em app/Validation

<?php

namespace App\Validation;

class CPFRules
{
 public function validaCPF(string $str, string &$error = null): bool
 {
 // Remove caracteres não numéricos
 $cpf = preg_replace('/[^0-9]/', '', $str);
 
 // Verifica se tem 11 dígitos
 if (strlen($cpf) != 11) {
 return false;
 }
 
 // Verifica se todos os dígitos são iguais
 if (preg_match('/^(\d)\1{10}$/', $cpf)) {
 return false;
 }
 
 // Calcula o primeiro dígito verificador
 $soma = 0;
 for ($i = 0; $i < 9; $i++) {
 $soma += $cpf[$i] * (10 - $i);
 }
 $resto = $soma % 11;
 $dv1 = ($resto < 2) ? 0 : 11 - $resto;
 
 // Verifica o primeiro dígito verificador
 if ($cpf[9] != $dv1) {
 return false;
 }
 
 // Calcula o segundo dígito verificador
 $soma = 0;
 for ($i = 0; $i < 10; $i++) {
 $soma += $cpf[$i] * (11 - $i);
 }
 $resto = $soma % 11;
 $dv2 = ($resto < 2) ? 0 : 11 - $resto;
 
 // Verifica o segundo dígito verificador
 if ($cpf[10] != $dv2) {
 return false;
 }
 
 return true;
 }
 
 public function validaCPFCNPJ(string $str, string &$error = null): bool
 {
 // Remove caracteres não numéricos
 $documento = preg_replace('/[^0-9]/', '', $str);
 
 // Verifica se é CPF (11 dígitos) ou CNPJ (14 dígitos)
 if (strlen($documento) == 11) {
 return $this->validaCPF($documento);
 } elseif (strlen($documento) == 14) {
 return $this->validaCNPJ($documento);
 }
 
 return false;
 }
 
 public function validaCNPJ(string $str, string &$error = null): bool
 {
 // Remove caracteres não numéricos
 $cnpj = preg_replace('/[^0-9]/', '', $str);
 
 // Verifica se tem 14 dígitos
 if (strlen($cnpj) != 14) {
 return false;
 }
 
 // Verifica se todos os dígitos são iguais
 if (preg_match('/^(\d)\1{13}$/', $cnpj)) {
 return false;
 }
 
 // Calcula o primeiro dígito verificador
 $soma = 0;
 $multiplicador = 5;
 for ($i = 0; $i < 12; $i++) {
 $soma += $cnpj[$i] * $multiplicador;
 $multiplicador = ($multiplicador == 2) ? 9 : $multiplicador - 1;
 }
 $resto = $soma % 11;
 $dv1 = ($resto < 2) ? 0 : 11 - $resto;
 
 // Verifica o primeiro dígito verificador
 if ($cnpj[12] != $dv1) {
 return false;
 }
 
 // Calcula o segundo dígito verificador
 $soma = 0;
 $multiplicador = 6;
 for ($i = 0; $i < 13; $i++) {
 $soma += $cnpj[$i] * $multiplicador;
 $multiplicador = ($multiplicador == 2) ? 9 : $multiplicador - 1;
 }
 $resto = $soma % 11;
 $dv2 = ($resto < 2) ? 0 : 11 - $resto;
 
 // Verifica o segundo dígito verificador
 if ($cnpj[13] != $dv2) {
 return false;
 }
 
 return true;
 }
}

2 - Importando a classe para app/Config/Validation.php

<?php

namespace Config;

use CodeIgniter\Validation\CreditCardRules;
use CodeIgniter\Validation\FileRules;
use CodeIgniter\Validation\FormatRules;
use CodeIgniter\Validation\Rules;
use App\Validation\CPFRules;

class Validation
{
 //--------------------------------------------------------------------
 // Setup
 //--------------------------------------------------------------------

 /**
 * Stores the classes that contain the
 * rules that are available.
 *
 * @var string[]
 */
 public $ruleSets = [
 Rules::class,
 FormatRules::class,
 FileRules::class,
 CreditCardRules::class,
 CPFRules::class, // Adicione esta linha
 ];

 /**
 * Specifies the views that are used to display the
 * errors.
 *
 * @var array<string, string>
 */
 public $templates = [
 'list' => 'CodeIgniter\Validation\Views\list',
 'single' => 'CodeIgniter\Validation\Views\single',
 ];

 //--------------------------------------------------------------------
 // Rules
 //--------------------------------------------------------------------
}

3 - Utilizando a classe de validação nas #regras de validação.

public function store()
{
// Regras de validação, incluindo CPF/CNPJ
 $rules = [
 'cpf_cnpj' => [
 'label' => 'CPF/CNPJ',
 'rules' => 'required|validaCPFCNPJ',
 'errors' => [
 'required' => 'O campo CPF/CNPJ é obrigatório.',
 'validaCPFCNPJ' => 'O CPF/CNPJ informado não é válido.'
 ]
 ],
 // Outras regras de validação para os demais campos...
 ];
 
 // Executa a validação
 if (!$this->validate($rules)) {
 // Se a validação falhar, retorna ao formulário com erros
 return redirect()->back()
 ->withInput()
 ->with('errors', $this->validator->getErrors());
 }
 
 // Se a validação passar, salva os dados
}

Ou você pode utilizar um apelido e trazer a regra de validação da classe de validação do #codeigniter -> app/Config/Validation.php

public $cadastro_de_cliente = [

 'cpf_cnpj' => [
 'label' => 'CPF/CNPJ',
 'rules' => 'required|validaCPFCNPJ',
 'errors' => [
 'required' => 'O campo CPF/CNPJ é obrigatório.',
 'validaCPFCNPJ' => 'O CPF/CNPJ informado não é válido.'
 ]
 ],
];

// No controller

if (!$this->validate('cadastro_de_cliente')) {
 ...
}