Si buscas en google validar DNI (o NIF o cualquier otra cosa) seguro q te sale aunque sea en javascript. Y de ahí a pasarlo a PHP está tirado.
Te coloco las funciones q uso para validar NIF y CIF:
Código PHP:
function validadni ($dni) {
$nif=substr ($dni, 0, 8)+0;
$letra=strtoupper (substr ($dni, -1));
$letranif_array[0]="T";
$letranif_array[1]="R";
$letranif_array[2]="W";
$letranif_array[3]="A";
$letranif_array[4]="G";
$letranif_array[5]="M";
$letranif_array[6]="Y";
$letranif_array[7]="F";
$letranif_array[8]="P";
$letranif_array[9]="D";
$letranif_array[10]="X";
$letranif_array[11]="B";
$letranif_array[12]="N";
$letranif_array[13]="J";
$letranif_array[14]="Z";
$letranif_array[15]="S";
$letranif_array[16]="Q";
$letranif_array[17]="V";
$letranif_array[18]="H";
$letranif_array[19]="L";
$letranif_array[20]="C";
$letranif_array[21]="K";
$letranif_array[22]="E";
$letranif_array[23]="F";
$resto=$nif%23;
if ($letra==$letranif_array[$resto] && $nif!=0){
return true;
}else{
return false;
}
}
function validacif ($cif) {
$soc=strtoupper(substr ($cif,0,1));
$arraysoc=array ("A","B","C","D","E","F","G","H","K","L","M","N","P","Q","S");
if (!in_array ($soc,$arraysoc)) {
return false;
} else {
$numero=substr ($cif,1,-1);
if ($numero==0) {
return false;
} else {
$control=substr ($cif,-1);
for ($i=0;$i<strlen($numero);$i++) {
$array[$i]=substr ($numero,$i,1);
}
$par=0;
for ($i=1;$i<=5;$i=$i+2) {
$par=$par+$array[$i];
}
$impar=0;
for ($i=0;$i<=6;$i=$i+2) {
$sub=0;
$sub=$array[$i]*2;
if ($sub>10) $sub=$sub-9;
$impar=$impar+$sub;
}
$sum=$par+$impar;
while ($sum>10) $sum=$sum-10;
$cont=10-$sum;
$letra[1]="A";
$letra[2]="B";
$letra[3]="C";
$letra[4]="D";
$letra[5]="E";
$letra[6]="F";
$letra[7]="G";
$letra[8]="H";
$letra[9]="I";
$letra[0]="J";
if ($control==$cont || strcmp (strtoupper($control),$letra[$cont])==0) {
return true;
} else {
return false;
}
}
}
}
Espero q te sean útiles.
Saludos.