Vamos fazer uma função em 
PHP, que vai retornar se determinado CPF é válido ou não. Mas antes disso, vamos entender como é feito este cálculo.
Como é feito o cálculo do CPF
O CPF é formado por 11 números, e os dois últimos números são os dígitos verificadores. Vamos criar aqui um número qualquer: 
555.444.333-89, neste exemplo os dígitos verificadores são 8 e 9.
Vamos testar:
    5×10 = 50
    5×9 =  45
    5×8 =  40
    4×7 =  35
    4×6 =  24
    4×5 =  20
    3×4 =  16
    3×3 =  9
    3×2 =  6
____________
Total =  245
Agora Vamos a alguns cálculos para verificarmos o primeiro dígito.
Dividiremos o total das multiplicações dos números do CPF que foi feita acima (245) por 11, ficando assim:
 245 / 11 = 22
Você pode está pensando, porque 22, poderia ser 21 também, vamos explicar:
- Para o cálculo dar certo, precisamos de divisões que sejam exatas ou tenham sobras de números, e não de falta de números.
Exemplo : Usando o processo reverso da divisão (ou seja, a multiplicação) se fosse 21 o resultado da questão, ficaria assim:
 245 / 11 = 21
Mas: 21 * 11 = 231
Sendo assim, faltariam números pois o nosso número alvo é 245, e o resultado foi 231 que é menor, e nosso objetivo é que tenha sobra de 
números e não a falta de números. Já usando o 22, o resultado ficaria:
 245 / 11 = 22 
Exemplo : 22 * 11 = 242 (sendo assim, teríamos sobra de números que no caso é 8)
Agora é só usar a sobra ( 8 ) e subtrair por 11, ficando assim:
 11 - 8 = 3
Agora que encontramos o Primeiro Dígito (que é 3), já descobrimos que o CPF exemplificado é um CPF inválido, pois o primeiro digito é 3 e 
não o número 8.
Função em PHP
function verificar_cpf($val) {
 
    $cpf = str_replace('-', '', str_replace('.', '', $val));
 
    if (!is_numeric($cpf)) {
        $status = false;
    }
 
    else {
        if (($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || ($cpf == '44444444444') || ($cpf == 
'55555555555') || ($cpf == 
'66666666666') || ($cpf == '77777777777') || ($cpf == '88888888888') || ($cpf == '99999999999') || ($cpf == '00000000000')) {
            $status = false;
        }
 
        else {
            $dv_informado = substr($cpf, 9, 2);
 
            for ($i = 0; $i <= 8; $i++) {
                $digito[$i] = substr($cpf, $i, 1);
            }
 
            $posicao = 10;
            $soma = 0;
 
            for ($i = 0; $i <= 8; $i++) {
                $soma = $soma + $digito[$i] * $posicao;
                $posicao = $posicao - 1;
            }
 
            $digito[9] = $soma % 11;
 
            if ($digito[9] < 2) {
                $digito[9] = 0;
            }
            else {
                $digito[9] = 11 - $digito[9];
            }
 
            $posicao = 11;
            $soma = 0;
 
            for ($i = 0; $i <= 9; $i++) {
                $soma = $soma + $digito[$i] * $posicao;
                $posicao = $posicao - 1;
            }
 
            $digito[10] = $soma % 11;
 
            if ($digito[10] < 2) {
                $digito[10] = 0;
            }
            else {
                $digito[10] = 11 - $digito[10];
            }
 
            $dv = $digito[9] * 10 + $digito[10];
            if ($dv != $dv_informado) {
                $status = false;
            }
            else $status = true;
        }
    }
 
    return $status;
 
}
Depois disso, vamos puxar a informação:
verificar_cpf($cpf)
E para quem quiser ver, aqui tem uma demonstração online: 
http://www.renanmpimentel.com.br/exemplos/validar-cpf