RSS

  • YouTube
  • LinkedIn
  • Google

Código de validación CPF para PHP

El siguiente código es una función PHP optimizada para tener el menor número de complejidad ciclomática que pude según la explicación presente en el artículo. Método brasileño de validación de la ACB - Registro individual. Tiene un ligero cambio en el momento del cálculo del segundo probador digitalizado. En lugar de comenzar con el segundo dígito, El código comienza con el primero y utiliza el valor 11 como multiplicador. Otro cambio notable es que para evitar la necesidad de comparación saber si estamos en el noveno dígito y decimo, Asigno el valor cero al último elemento (índice 10) para reducir una comparación más.

El algoritmo utilizado es el 1 explicado en el artículo citado anteriormente y hay un pequeño truco para evitar comparar con el resto igual a 10 que es hacer el módulo 10 del resto.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @author Marcos Regis <marcos@marcosregis.com>
     * @param  string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

Puede probar este código aquí.

Comentario (1)

Contesta

Su dirección de correo electrónico no se publicará.

Este sitio utiliza Akismet para reducir el spam. Aprender cómo se procesaron los datos de comentario.