3v4l.org

run code in 300+ PHP versions simultaneously
<?php class CPF { // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores. /** * * Verifica se um valor informado é um CPF válido * @author Marcos Regis <marcos@marcosregis.com> * @param string $cpf * @return bool */ public static 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; } /** * Filtra um CPF informado em <var>$cpf</var> removendo mascaras e valores como 111.111.111-11 que são * falsos positivos * @param string $cpf * @return string */ public static function filtrar(string $cpf): string { $cpf = (string)preg_replace('#\D#', '', $cpf); return (string)preg_replace('#(\d)\1{10}#', '', $cpf); } } $cpfs = [ '529.982.247-25', // válido, com mascara '123.456.789-09', // válido, regra do resto 0 ou 1 '834.115.113-89', // válido, com mascara '50365387223', // válido, sem mascara '112413460-38', // válido, com apenas parte da máscara '242.629.250-92', // inválido, com máscara '88888888888', // inválido, falso positivo sem máscaa=ra '123.456.789', // inválido, incompleto com máscara '123456789', // inválido, incompleto sem máscara '', // inválido, vazio ]; foreach ($cpfs as $cpf) { $cpfFiltrado = CPF::filtrar($cpf); echo sprintf('O cpf [%s] é %s!' . PHP_EOL, $cpf, (CPF::validar($cpfFiltrado) ? 'válido' : 'inválido')); }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.20.0100.01018.18
8.4.10.0230.00519.84
8.3.150.0110.00718.79
8.3.140.0120.00616.92
8.3.130.0040.00418.41
8.3.120.0090.00319.09
8.3.110.0040.00416.74
8.3.100.0130.00724.06
8.3.90.0000.00826.77
8.3.80.0060.00316.75
8.3.70.0110.00717.00
8.3.60.0150.00418.43
8.3.50.0110.00420.39
8.3.40.0060.00920.40
8.3.30.0060.00919.02
8.3.20.0000.00824.18
8.3.10.0080.00024.66
8.3.00.0120.00626.16
8.2.260.0170.00318.94
8.2.250.0060.00318.70
8.2.240.0030.00619.09
8.2.230.0000.01020.94
8.2.220.0040.00437.54
8.2.210.0160.00326.77
8.2.200.0100.00018.86
8.2.190.0060.01216.88
8.2.180.0070.00725.92
8.2.170.0070.00722.96
8.2.160.0110.00422.96
8.2.150.0080.00025.66
8.2.140.0040.00424.66
8.2.130.0060.00326.16
8.2.120.0070.00020.91
8.2.110.0070.00320.43
8.2.100.0090.00020.35
8.1.310.0040.00418.21
8.1.300.0090.00016.51
8.1.290.0030.00730.84
8.1.280.0120.00425.92
8.1.270.0040.00424.66
8.1.260.0030.00526.35
8.1.250.0050.00528.09
8.1.240.0100.00018.94
8.1.230.0100.00018.81
8.0.140.0100.00319.65
8.0.10.0060.00317.06
7.4.320.0110.00817.67

preferences:
56.54 ms | 403 KiB | 5 Q