Hola WadE87... cómo vas??
Pues mira... es algo propio de las transacciones en mysql... sabes bien que una transacción no es finalizada salvo que tengo el "commit" (confirmación). Es lógico, haces lo siguiente:
Código PHP:
$sql1="INSERT INTO usuarios (id, alias, clave, privilegios, mail, dni, valido, aleatorio) VALUES (".$id.",'".$usuario."','".md5($clave)."', 1, '".$mail."', '".$dni."', 0, ".rand().")";
mysql_query($sql1,$conexion) or die(mysql_query('rollback'));
$id=mysql_insert_id();
Aún no haz confimado la transacción!!! Entonces pues el id que te trae es
último confirmado. Me entiendes?? Si haces un commit después de hacer el insert... tenlo por seguro que te arroja el id respectivo.
Código PHP:
$sql1="INSERT INTO usuarios (id, alias, clave, privilegios, mail, dni, valido, aleatorio) VALUES (".$id.",'".$usuario."','".md5($clave)."', 1, '".$mail."', '".$dni."', 0, ".rand().")";
mysql_query($sql1,$conexion) or die(mysql_query('rollback'));
mysql_query("COMMIT",$conexion);
$id=mysql_insert_id();
Es que llamas el mysql_insert_id antes de confirmar

Es algo a tener en cuenta ocn las transacciones...
Saludos