CPF-Validierungscode für PHP

O Que Ando Aprendendo Nesta Caminhada Sobre a Terra

CPF-Validierungscode für PHP

Der folgende Code ist eine PHP-Funktion, die optimiert ist, um die kleinste Anzahl von zyklomatischer Komplexität zu haben, die ich basierend auf der Erklärung im Artikel Brasilianische CPF-Validierungsmethode - Individuelle Registrierung. Es hat eine leichte Änderung zum Zeitpunkt der Berechnung des zweiten digitalisierten Testers. Anstatt mit der zweiten Ziffer zu beginnen, Der Code beginnt mit dem ersten und verwendet den Wert 11 als Multiplikator. Eine weitere bemerkenswerte Änderung besteht darin, dass wir nicht vergleichen müssen, um zu wissen, ob wir uns in der neunten und decimo Ziffer befinden., Ich weise dem letzten Element den Wert Null zu (Index 10) um einen weiteren Vergleich zu reduzieren.

Der verwendete Algorithmus ist der 1 erklärt in dem zuvor zitierten Artikel und es gibt einen kleinen Trick, um zu vermeiden, mit dem Rest gleich zu vergleichen 10 die das Modul machen soll 10 des Restes.

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

Sie können diesen Code testen Hier.

One Response

Hinterlasse eine Antwort

Ihre e-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *

Diese Seite benutzt Akismet, Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet wird.