Suponhamos que o nosso BI é 8074662-4 e onde o último 4 é o algarismo mistério (ou algarismo de controlo). Para validar, multiplicamos o último algarismo por 1 (4x1), o penúltimo por 2 (2x2), e assim sucessivamente. Somamos os valores obtidos (neste caso 176) e calculamos o resto da divisão inteira por 11. Se o resultado for diferente de 0, o número é inválido. O mesmo se aplica aos NIFs (caso em que o último algarismo é o algarismo de controlo). Existe uma excepção para o caso em que o algarismo de controlo é o 0, pois por vezes este é usado para representar o valor 10. Neste caso, caso o resto da divisão inteira não seja 0, é necessário repetir o processo usando o valor 10 em vez do último algarismo.
<?php function binif_isvalid($nr){ while (strlen($nr) < 9) { $nr = "0" . $nr; } $calc = 9 * $nr[0] + 8 * $nr[1] + 7 * $nr[2] + 6 * $nr[3] + 5 * $nr[4] + 4 * $nr[5] + 3 * $nr[6] + 2 * $nr[7] + $nr[8]; if ($calc % 11 === 0) { return true; } else if($nr[8] === 0 && ($calc + 10) % 11 === 0) { return true; } else { return false; } }
<form action="" method="POST" enctype="multipart/form-data" name="form1"> <input type="text" name="bi" maxlength="8" size="10" /> <input type="text" name="bi2" maxlength="1" size="2" /> <input type="submit" name="submit" /> </form>
<?php if(binif_isvalid($_POST['bi'].$_POST['bi2'])){ echo "BI válido"; }else{ echo "BI inválido... Verifique se não se enganou a escrever"; }