Já tenho visto por aí vários algoritmos para validar o numero de contribuinte, mas não vi um feito em PHP.
Disponibilizo aqui um pedaço de código em PHP para que possam incluir nos vossos serviços.
function isValidNif($nif){ //Verificar se e' um numero e se e' composto exactamente por 9 digitos if(!is_numeric($nif) || strlen($nif) != 9) return false; $narray = str_split($nif); //verificar se o primeiro digito e' valido. O primeiro digito indica o tipo de contribuinte. if($narray[0] != 1 && $narray[0] != 2 && $narray[0] != 5 && $narray[0] != 6 && $narray[0] != 8 && $narray[0] != 9) return false; $checkbit = $narray[0] * 9; for($i=2; $i<=8; $i++){ $checkbit += $nif[$i-1] * (10 - $i); } $checkbit = 11 - ($checkbit % 11); if($checkbit >= 10) $checkbit=0; if($nif[8] == $checkbit) return true; echo "$nif - $checkbit"; return false; }