Si no forzara el tipo para hacer la verificacion el codigo seria:
Código PHP:
//$numero = 280421646361;//Si empieza por 0 y SI FUNCIONA O VERIFICA COMO CORRECTO
$numero=461050199640;// no empieza por 0, NO ME LO DA COMO CORRECTO
echo $numero." de tipo ".gettype($d);
$a= substr($numero,0,2); //a los dos primeros numeros
echo "<br>A los dos primeros numeros= ".$a." de tipo ".gettype($a);;
$c= substr($numero,-2);//a los dos ultimos
echo "<br>C los dos ultimos= ". $c." de tipo ".gettype($c);;
$b= substr($numero,2,-2);// al resto
echo "<br>B al resto= ".$b." de tipo ".gettype($b);"<br>";
if ($b<10000000)
{
$d=$b+$a*10000000;
echo "<br>D b<10.000.000 ahora vale = ".$d." de tipo ".gettype($d);
} else {
//$bb=int($b);
$d=$a.$b;
echo "<br>D b NO <10.000.000 ahora vale = ".$d." de tipo ".gettype($d); // ESTA LA HACE MAL
}
echo "<br> valor de d (a+b)= ".$d." de tipo ".gettype($d);
$resto=$d%97;// Mod resto de la división entera
echo "<br> el resto es ==== ".$resto." de tipo ".gettype($resto);
// Ahora COMPARAMOS
echo "<br>A COMPARA CON VAlor de C (DC de los dos ultimos numeros) = ".$c." de tipo ".gettype($cc);
if ($c==$resto)
{
echo "<br>CORRECTO";
} else {
echo "<br>NO CORRECTO deberia de ser ".$resto;
}
?>
Los dos numeros de seguridad social son de verdad, por lo que el resultado deberia de ser correcto.
En le caso de el numero: 280421646361 que es ($b<10000000) me da como correcto. Por lo tanto la verificacion es correcta.
Pero en el caso de del nº: 461050199640 que no es menor de 10000000 no me da como correcto, nos se si porque.