entonces una función recursiva deberías funcionar...
Código PHP:
function x($y)
{
$a = 0;
foreach (preg_split('//', $y) as $b) $a += $b *$b;
if ($a == 1 OR $a == 20) return $y;
return x($a);
}
echo x(substr(mt_rand(),0,4));
no se si este bien mi código, pero una idea te dará... ;)