Al final decidí dejarlo de esta forma:
Código PHP:
Ver original<?php
$caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$caracteres .= "abcdefghijklmnopqrstuvwxyz";
$caracteres .="1234567890";
$caracteres .="|@#~$%()=^*+[]{}-_";
$password = substr($desordenada, 0, $longitud); echo $password;
?>
Si se usa en un futuro 10-12 caracteres creo que están bien para una contraseña que seguramente el 99,9% de la gente acabe cambiando.
Gracias @jonni09lo por la idea de añadir también signos, no se me ocurrió en el momento. Tu código me hizo recordarlos XD