First and last char is alfabetic, A-Za-z.
This is because I have seen websites that will demand this.
Always is generated 1 Upper, 1 Lower, 1 Number and 1 Symbol.
The remaining 4 chars are of any type.
This gives a password that is reasonable secure.
I use this generator for my own passwords.
To remember passwords I use Last Pass https://www.lastpass.com/
<?php
// The Characters
// 8 chars excluded: "&'<>\` and space
$symbol = '!#$%()*+,-./:;=?@[]^_{|}~'; // 25 chars
$number = '0123456789'; // 10 chars
$upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 26 chars
$lower = 'abcdefghijklmnopqrstuvwxyz'; // 26 chars
$alfa = $upper.$lower; // 52 chars
$chars = $symbol.$number.$upper.$lower;// 87 chars
// Password generator for 10 chars
$pw = '';
$ord = str_shuffle('12345678');
$pw[0] = $alfa[mt_rand(0,51)];
$pw[$ord[0]] = $symbol[mt_rand(0,24)];
$pw[$ord[1]] = $number[mt_rand(0,9)];
$pw[$ord[2]] = $upper[mt_rand(0,25)];
$pw[$ord[3]] = $lower[mt_rand(0,25)];
$pw[$ord[4]] = $chars[mt_rand(0,86)];
$pw[$ord[5]] = $chars[mt_rand(0,86)];
$pw[$ord[6]] = $chars[mt_rand(0,86)];
$pw[$ord[7]] = $chars[mt_rand(0,86)];
$pw[9] = $alfa[mt_rand(0,51)];
// Display result
echo '<p style="font-family:\'Courier New\'">';
echo '1234567890123456';
echo '<br>';
echo $pw;
echo '</p>';
exit();