Depois do último algoritmo para validar o contribuinte, aqui fica uma versão para validar o NIB.
function isValidNib($nib){ $result = ""; if(strlen(intval($nib)) != 21) return "NIB INVALIDO (Standard: 21 algarismos. Introduzido: " . strlen(intval($nib)) . ")"; $nnib = str_split(intval($nib)); for($i=0; $i< 19 ; $i++){ $result = (($result + $nnib[$i]) * 10) % 97; } $result = 98 - (($result * 10) % 97); if($result < 10) $result = "0" + $result; if(substr($nib, 19, 2) != $result) return "NIB INVALIDO"; else return "NIB VALIDO"; }
Se preferirem podem trocar o texto enviado no retorno das funções e utilizar um boleano true/false.
EDIT: Agradecimentos ao Nuno Cancelo pela dica de optimização enviada!