Code de validation CPF pour PHP

O que ando ainda nesta caminhada sobre un Terra

Code de validation CPF pour PHP

Le code ci-dessous provient d’une fonction PHP optimisée pour avoir le plus petit nombre de complexité cyclomatique que j’ai pu obtenir sur la base de l’explication de l’article Algorithme brésilien de validation CPF – Registre des contribuables individuels. Il y a un léger changement dans le moment du calcul du deuxième vérificateur numérisé. Au lieu de commencer par le deuxième chiffre, Le code commence par le premier et utilise la valeur 11 comme multiplicateur. Un autre changement visible est que pour éviter d’avoir à comparer pour savoir si nous sommes dans les neuvième et dixième chiffres, J’assigne la valeur zéro au dernier élément (index 10) Pour affiner une autre comparaison.

L’algorithme utilisé est l’algorithme 1 expliqué dans l’article cité plus haut et il y a une petite astuce pour éviter de le comparer avec le reste de la même chose que 10 qui est de faire en sorte que le module 10 du reste.

   // 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;
    }

Vous pouvez tester ce code Ici.

One Response

Laisser une réponse

Votre adresse email ne sera pas publié. Les champs obligatoires sont marqués *

Ce site utilise Akismet pour réduire le spam. Apprenez comment vos données de commentaire sont transformées.